Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- const int Maxm = 1000;
- const int Maxn = 101;
- const int Inf = 1000000000;
- const int Maxd = 5;
- const int dy[Maxd] = {-1, 0, 1, 0, 0};
- const int dx[Maxd] = {0, -1, 0, 1, 0};
- int T;
- int m;
- int t[Maxm], x[Maxm], y[Maxm];
- char typ[Maxn][Maxn][Maxn];
- int got[Maxn][Maxn][Maxn];
- int Solve(char need, char av)
- {
- fill((int*)got, (int*)got + Maxn * Maxn, 0);
- fill((int*)got + Maxn * Maxn, (int*)got + Maxn * Maxn * Maxn, -Inf);
- int res = 0;
- for (int t = 0; t < Maxn; t++)
- for (int i = 0; i < Maxn; i++)
- for (int j = 0; j < Maxn; j++) if (got[t][i][j] >= 0) {
- if (typ[t][i][j] == need) got[t][i][j]++;
- else if (typ[t][i][j] == av) got[t][i][j] = -Inf;
- res = max(res, got[t][i][j]);
- if (t + 1 < Maxn)
- for (int d = 0; d < Maxd; d++) {
- int ni = i + dy[d], nj = j + dx[d];
- if (0 <= ni && ni < Maxn && 0 <= nj && nj < Maxn)
- got[t + 1][ni][nj] = max(got[t + 1][ni][nj], got[t][i][j]);
- }
- }
- return res;
- }
- int main()
- {
- fill((char*)typ, (char*)typ + Maxn * Maxn * Maxn, '.');
- scanf("%d", &T);
- for (int tc = 1; tc <= T; tc++) {
- scanf("%d", &m);
- for (int i = 0; i < m; i++) {
- char q; scanf("%d %d %d %c", &t[i], &x[i], &y[i], &q);
- typ[t[i]][x[i]][y[i]] = q;
- }
- printf("Case #%d: %d %d\n", tc, Solve('u', 'a'), Solve('a', 'u'));
- for (int i = 0; i < m; i++)
- typ[t[i]][x[i]][y[i]] = '.';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement