반응형
https://www.codetree.ai/training-field/frequent-problems/problems/virus-experiment
바이러스 실험 문제 풀이는 BOJ 16235 : 나무 재테크와 같다.
#include <stdio.h>
#define MAX (10 + 5)
int T;
int N, M, K;
int energy[MAX][MAX];
int A[MAX][MAX];
int virus[MAX][MAX][50000 + 50000];
int front[MAX][MAX];
int back[MAX][MAX];
int dr[] = { -1, -1, -1, 0, 0, 1, 1, 1 };
int dc[] = { -1, 0, 1, -1, 1, -1, 0, 1 };
void input()
{
scanf("%d %d %d", &N, &M, &K);
for (int r = 1; r <= N; r++)
{
for (int c = 1; c <= N; c++)
{
scanf("%d", &A[r][c]);
energy[r][c] = 5;
}
}
for (int r = 1; r <= N; r++)
for (int c = 1; c <= N; c++)
front[r][c] = back[r][c] = 50000;
for (int i = 0; i < M; i++)
{
int x, y, z;
scanf("%d %d %d", &x, &y, &z);
int& virusCount = back[x][y];
virus[x][y][virusCount++] = z;
}
}
void spring_summer()
{
for (int r = 1; r <= N; r++)
{
for (int c = 1; c <= N; c++)
{
int start = front[r][c];
int end = back[r][c];
int& fr = front[r][c];
int& bk = back[r][c];
int t;
for (t = start; t < end; t++)
{
if (virus[r][c][t] <= energy[r][c])
{
energy[r][c] -= virus[r][c][t];
virus[r][c][t]++;
fr++;
virus[r][c][bk++] = virus[r][c][t];
}
else
break;
}
for (; t < end; t++)
{
fr++;
energy[r][c] += (virus[r][c][t] / 2);
}
}
}
}
void autumn()
{
for (int r = 1; r <= N; r++)
{
for (int c = 1; c <= N; c++)
{
int start = front[r][c];
int end = back[r][c];
for (int t = start; t < end; t++)
{
if (virus[r][c][t] % 5 != 0) continue;
for (int i = 0; i < 8; i++)
{
int nr, nc;
nr = r + dr[i];
nc = c + dc[i];
if (nr < 1 || nc < 1 || nr > N || nc > N) continue;
int& virusFront = front[nr][nc];
virus[nr][nc][--virusFront] = 1;
}
}
}
}
}
void winter()
{
for (int r = 1; r <= N; r++)
for (int c = 1; c <= N; c++)
energy[r][c] += A[r][c];
}
int main(void)
{
// scanf("%d", &T);
T = 1;
for (int tc = 1; tc <= T; tc++)
{
input();
for (int time = 0; time < K; time++)
{
spring_summer();
autumn();
winter();
}
int ans = 0;
for (int r = 1; r <= N; r++)
for (int c = 1; c <= N; c++)
ans += back[r][c] - front[r][c];
printf("%d\n", ans);
}
return 0;
}
반응형
'알고리즘 > [ADV] 삼성 SW 역량 테스트 A형' 카테고리의 다른 글
[코드트리] 시공의 돌풍 (삼성 SW 역량테스트 2019 상반기 오전 1번) (0) | 2024.06.08 |
---|---|
[코드트리] 전투 로봇 (삼성 SW 역량테스트 2018 하반기 오후 2번) (0) | 2024.06.08 |
[코드트리] 토스트 계란틀 (삼성 SW 역량테스트 2018 하반기 오전 2번) (0) | 2024.06.08 |
[코드트리] 병원 거리 최소화하기 (삼성 SW 역량테스트 2018 상반기 오후 2번) (0) | 2024.06.08 |
[코드트리] 드래곤 커브 (삼성 SW 역량테스트 2018 상반기 오후 1번) (1) | 2024.06.07 |
댓글