-
[SWEA 2382] 미생물 격리C 프로그래밍/SWEA 2022. 12. 14. 12:36728x90
https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
#include <cstdio> #include <cstring> int T; int N, M, K; long long int board[100 + 2][100 + 2]; int dir[100 + 2][100 + 2]; long long tmp[100 + 2][100 + 2]; // 그룹 여러개 겹칠 때 int tmp_dir[100 + 2][100 + 2]; // 방향 갱신 long long MAX[100 + 2][100 + 2]; // 최댓값 저장용 // dir // 0 1상 2하 3좌 4우 int dir_x[5] = { 0, -1 ,1, 0, 0 }; int dir_y[5] = { 0, 0, 0, -1, 1 }; int dir_op[5] = { 0, 2, 1, 4, 3 }; void input() { // init memset(board, 0, sizeof(board)); memset(dir, 0, sizeof(dir)); memset(tmp, 0, sizeof(tmp)); memset(tmp_dir, 0, sizeof(tmp_dir)); memset(MAX, 0, sizeof(MAX)); scanf("%d %d %d", &N, &M, &K); for (int k = 1; k <= K; k++) { int r = 0, c = 0; long long int cnt = 0; int d = 0; scanf("%d %d %lld %d", &r, &c, &cnt, &d); board[r][c] = cnt; // 미생물 개수 dir[r][c] = d; // 방향 } //debug(); } void move_groups() { // init memset(tmp, 0, sizeof(tmp)); memset(tmp_dir, 0, sizeof(tmp_dir)); memset(MAX, 0, sizeof(MAX)); for (int r = 0; r < N; r++) { for (int c = 0; c < N; c++) { if (board[r][c] == 0) continue; // 해당 칸에 미생물 그룹 없음 int p = dir[r][c]; int nr = r + dir_x[p]; int nc = c + dir_y[p]; long long int num = board[r][c]; if (nr == 0 || nr == N - 1 || nc == 0 || nc == N - 1) { // 약품 있는 칸에 도달 if (num == 1) continue; // 해당 그룹 사라진다 num = board[r][c] / 2; p = dir_op[p]; } // 보드 정보 갱신 if (tmp[nr][nc] == 0) { MAX[nr][nc] = num; tmp[nr][nc] = num; tmp_dir[nr][nc] = p; } else { tmp[nr][nc] += num; if (MAX[nr][nc] < num) { MAX[nr][nc] = num; tmp_dir[nr][nc] = p; } } } } memcpy(board, tmp, sizeof(tmp)); memcpy(dir, tmp_dir, sizeof(tmp_dir)); } void simulation() { for (int t = 1; t <= M; t++) { move_groups(); //debug(); } } long long int output() { long long int total = 0; for (int r = 0; r < N; r++) { for (int c = 0; c < N; c++) { total += board[r][c]; } } return total; } int main() { scanf("%d", &T); for (int t = 1; t <= T; t++) { input(); simulation(); long long int ans = output(); printf("#%d %lld\n",t, ans); } return 0; }
728x90'C 프로그래밍 > SWEA' 카테고리의 다른 글
[SWEA 5644] 무선 충전 (0) 2022.12.14 [SWEA 5650] 벽돌깨기 (0) 2022.12.13 [SWEA 2819] 격자판의 숫자 이어 붙이기 (0) 2022.12.06 [SWEA 1949] 등산로 조성 (0) 2022.11.28 [SWEA 1210] Ladder1 (0) 2022.11.18