반응형
https://www.acmicpc.net/problem/20056
20056번: 마법사 상어와 파이어볼
첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치
www.acmicpc.net
1. 문제설명
구현함에 있어서 문제의 단계를 꼼꼼히 보아야하는 문제
각 파이어볼이 모두 이동한 후에 합쳐져야 하므로
현재 배열에 존재하는 파이어볼을 기준으로
새로운 배열에 파이어볼의 이동을 담아야한다.
2.문제풀이코드 C++
#include <bits/stdc++.h>
using namespace std;
int N, M, K;
struct fireBall {
int m, s, d;
};
int dx[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};
vector<fireBall> arr[51][51];
void Input();
void move() {
vector<fireBall> nextState[51][51];
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (arr[i][j].size() > 0) {
for (auto k: arr[i][j]) {
int nx = (i + dx[k.d] * k.s) % N;
int ny = (j + dy[k.d] * k.s) % N;
if (nx <= 0) nx += N;
if (ny <= 0) ny += N;
nextState[nx][ny].push_back({k.m, k.s, k.d});
}
}
}
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (nextState[i][j].size() > 1) {
int sumM = 0;
int sumS = 0;
bool dirSame = true;
int dir = nextState[i][j][0].d % 2;
for (auto k: nextState[i][j]) {
if (k.d % 2 != dir) {
dirSame = false;
}
sumS += k.s;
sumM += k.m;
}
int newM = sumM / 5;
int newS = sumS / nextState[i][j].size();
//new fireball 4
nextState[i][j].clear();
if (newM <= 0) continue;
int newDir = 0;
if (!dirSame) newDir = 1;
for (int k = 0; k < 4; k++) {
nextState[i][j].push_back({newM, newS, newDir});
newDir += 2;
}
}
}
}
swap(nextState, arr);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
Input();
for (int i = 0; i < K; i++) {
move();
}
int ans = 0;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
for (auto k: arr[i][j]) {
ans += k.m;
}
}
}
cout << ans << '\n';
}
void Input() {
cin >> N >> M >> K;
for (int i = 0; i < M; i++) {
int r, c, m, d, s;
cin >> r >> c >> m >> s >> d;
arr[r][c].push_back({m, s, d});
}
}
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 20058번 : 마법사 상어와 파이어스톰 - 구현, 시뮬레이션 C++ (0) | 2022.07.29 |
---|---|
백준 20057번 : 마법사 상어와 토네이도 (0) | 2022.07.28 |
백준 20055번: 컨베이어 벨트 위의 로봇 - 구현 C++ (0) | 2022.07.25 |
[백준] 19238번 : 스타트 택시 - BFS C++ (0) | 2022.07.23 |
백준 19237번 : 어른 상어 - 구현, 시뮬레이션 C++ (0) | 2022.07.22 |