Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<algorithm>
- #include<vector>
- #include<string.h>
- using namespace std;
- int ans;
- int a[101][101];
- int a_temp[101][101];
- int d[101][101];
- int wall[101][101]; //
- int maxdir[101][101]; //최대값의 방향
- int gox[] = { 0,0,0,-1,1 }; // 1번부터 시작
- int goy[] = { 0,-1,1,0,0 }; // 1 상 2 하 3 좌 4 우
- void process()
- {
- int n, m, k;
- cin >> n >> m >> k;
- //vector<vector<int> > d(n, vector<int>(n));
- //vector<vector<int> > a(n, vector<int>(n));
- for (int i = 0; i < k; i++)
- {
- int x = 0, y = 0, q = 0, dir = 0;
- cin >> y >> x >> q >> dir;
- d[y][x] = dir;
- a[y][x] = q;
- }
- for (int i = 0; i < n; i++)
- {
- wall[0][i] = -1;
- wall[i][0] = -1;
- }
- for (int i = 0; i < n; i++)
- {
- wall[n - 1][i] = -1;
- wall[i][n - 1] = -1;
- }
- while (m--)
- {
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- if (wall[i][j] != -1 || a[i][j] != 0)
- {
- int nx = j + gox[d[i][j]];
- int ny = i + goy[d[i][j]];
- if (0 <= nx && nx < n && 0 <= ny && ny < n)
- {
- if (a_temp[ny][nx] > 0 && wall[ny][nx] != -1) // 기존자리에 미생물이 있다 벽이 아니다
- {
- if (a_temp[ny][nx] < a[i][j])
- maxdir[ny][nx] = d[i][j];
- a_temp[ny][nx] = a_temp[ny][nx] + a[i][j]; //
- }
- else if (wall[ny][nx] != -1) // 미생물이 없다. 벽이 아니다.
- {
- a_temp[ny][nx] = a[i][j];
- maxdir[ny][nx] = d[i][j];
- }
- else if (wall[ny][nx] == -1) // 벽인가? (int) 미생물 / 2
- {
- a_temp[ny][nx] = a[i][j] / 2;
- if (d[i][j] == 1 || d[i][j] == 3) // 방향 반전
- maxdir[ny][nx] = d[i][j] + 1;
- else
- maxdir[ny][nx] = d[i][j] - 1;
- }
- }
- }
- }
- }
- memcpy(a, a_temp, sizeof(a)); // 중간결과 덮어쓰기
- memcpy(d, maxdir, sizeof(d));
- memset(a_temp, 0, sizeof(a_temp));
- memset(maxdir, 0, sizeof(maxdir));
- }
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- ans += a[i][j];
- }
- }
- }
- int main()
- {
- int t;
- //freopen("input.txt", "r", stdin);
- cin >> t;
- int test_case = 1;
- while (t--)
- {
- ans = 0;
- memset(a_temp, 0, sizeof(a_temp));
- memset(maxdir, 0, sizeof(maxdir));
- memset(a, 0, sizeof(a));
- memset(d, 0, sizeof(d));
- memset(wall, 0, sizeof(wall));
- process();
- cout << "#" << test_case << " " << ans << endl;
- test_case++;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement