# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
55399 | 2018-07-07T07:35:17 Z | 강태규(#1543) | Sandwich (JOI16_sandwich) | C++11 | 8000 ms | 40860 KB |
#include <iostream> #include <algorithm> #include <vector> #include <queue> #include <deque> #include <set> #include <map> #include <unordered_map> #include <functional> #include <cstring> #include <cmath> #include <ctime> #include <cstdlib> using namespace std; typedef long long llong; typedef long double ld; typedef pair<int, int> pii; typedef pair<llong, llong> pll; int r, c; char grid[401][401]; vector<int> edge[2][401][401]; int used[2][400][400]; int fin[2][400][400]; void intToNode(int &t, int &x, int &y, int i) { y = i & 1023; x = (i >> 10) & 1023; t = i >> 20; } const int inf = 1e6; int dfs(int d) { int t, x, y; intToNode(t, x, y, d); if (fin[t][x][y]) return 0; if (used[t][x][y]) return inf; used[t][x][y] = 1; int ret = 1; for (int i : edge[t][x][y]) { ret += dfs(i); ret = min(ret, inf); } fin[t][x][y] = 1; return ret; } int ans[400][400]; int main() { scanf("%d%d", &r, &c); for (int i = 0; i < r; ++i) { scanf("%s", grid[i]); } for (int i = 0; i < r; ++i) { for (int j = 0; j < c; ++j) { if (j) edge[0][i][j].push_back((i << 10) | (j - 1)); if (i + 1 < r) edge[grid[i][j] != 'N'][i][j].push_back(((grid[i + 1][j] != 'N') << 20) | ((i + 1) << 10) | j); if (j + 1 < c) edge[1][i][j].push_back((1 << 20) | (i << 10) | (j + 1)); if (i) edge[grid[i][j] != 'Z'][i][j].push_back(((grid[i - 1][j] != 'Z') << 20) | ((i - 1) << 10) | j); } } for (int i = 0; i < r; ++i) { for (int j = 0; j < r; ++j) { for (int k = 0; k < c; ++k) { used[0][j][k] = 0; used[1][j][k] = 0; fin[0][j][k] = 0; fin[1][j][k] = 0; } } int sum = 0; for (int j = 0; j < c; ++j) { sum += dfs((i << 10) | j); sum = min(sum, inf); ans[i][j] = sum; } } for (int i = 0; i < r; ++i) { for (int j = 0; j < r; ++j) { for (int k = 0; k < c; ++k) { used[0][j][k] = 0; used[1][j][k] = 0; fin[0][j][k] = 0; fin[1][j][k] = 0; } } int sum = 0; for (int j = c; j--; ) { sum += dfs((1 << 20) | (i << 10) | j); sum = min(sum, inf); ans[i][j] = min(ans[i][j], sum); } } for (int i = 0; i < r; ++i) { for (int j = 0; j < c; ++j) { printf("%d ", ans[i][j] < inf ? 2 * ans[i][j] : -1); } printf("\n"); } return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 10 ms | 7928 KB | Output is correct |
2 | Correct | 9 ms | 7928 KB | Output is correct |
3 | Correct | 8 ms | 8348 KB | Output is correct |
4 | Correct | 8 ms | 8348 KB | Output is correct |
5 | Correct | 8 ms | 8448 KB | Output is correct |
6 | Correct | 28 ms | 8832 KB | Output is correct |
7 | Correct | 23 ms | 8832 KB | Output is correct |
8 | Correct | 20 ms | 8832 KB | Output is correct |
9 | Correct | 17 ms | 8832 KB | Output is correct |
10 | Correct | 18 ms | 8832 KB | Output is correct |
11 | Correct | 25 ms | 8832 KB | Output is correct |
12 | Correct | 14 ms | 8832 KB | Output is correct |
13 | Correct | 25 ms | 8832 KB | Output is correct |
14 | Correct | 22 ms | 8980 KB | Output is correct |
15 | Correct | 15 ms | 8980 KB | Output is correct |
16 | Correct | 16 ms | 8980 KB | Output is correct |
17 | Correct | 16 ms | 8980 KB | Output is correct |
18 | Correct | 16 ms | 8980 KB | Output is correct |
19 | Correct | 15 ms | 8980 KB | Output is correct |
20 | Correct | 16 ms | 8980 KB | Output is correct |
21 | Correct | 22 ms | 8980 KB | Output is correct |
22 | Correct | 20 ms | 8980 KB | Output is correct |
23 | Correct | 19 ms | 8980 KB | Output is correct |
24 | Correct | 33 ms | 8980 KB | Output is correct |
25 | Correct | 25 ms | 8980 KB | Output is correct |
26 | Correct | 20 ms | 8980 KB | Output is correct |
27 | Correct | 12 ms | 8980 KB | Output is correct |
28 | Correct | 18 ms | 9000 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 10 ms | 7928 KB | Output is correct |
2 | Correct | 9 ms | 7928 KB | Output is correct |
3 | Correct | 8 ms | 8348 KB | Output is correct |
4 | Correct | 8 ms | 8348 KB | Output is correct |
5 | Correct | 8 ms | 8448 KB | Output is correct |
6 | Correct | 28 ms | 8832 KB | Output is correct |
7 | Correct | 23 ms | 8832 KB | Output is correct |
8 | Correct | 20 ms | 8832 KB | Output is correct |
9 | Correct | 17 ms | 8832 KB | Output is correct |
10 | Correct | 18 ms | 8832 KB | Output is correct |
11 | Correct | 25 ms | 8832 KB | Output is correct |
12 | Correct | 14 ms | 8832 KB | Output is correct |
13 | Correct | 25 ms | 8832 KB | Output is correct |
14 | Correct | 22 ms | 8980 KB | Output is correct |
15 | Correct | 15 ms | 8980 KB | Output is correct |
16 | Correct | 16 ms | 8980 KB | Output is correct |
17 | Correct | 16 ms | 8980 KB | Output is correct |
18 | Correct | 16 ms | 8980 KB | Output is correct |
19 | Correct | 15 ms | 8980 KB | Output is correct |
20 | Correct | 16 ms | 8980 KB | Output is correct |
21 | Correct | 22 ms | 8980 KB | Output is correct |
22 | Correct | 20 ms | 8980 KB | Output is correct |
23 | Correct | 19 ms | 8980 KB | Output is correct |
24 | Correct | 33 ms | 8980 KB | Output is correct |
25 | Correct | 25 ms | 8980 KB | Output is correct |
26 | Correct | 20 ms | 8980 KB | Output is correct |
27 | Correct | 12 ms | 8980 KB | Output is correct |
28 | Correct | 18 ms | 9000 KB | Output is correct |
29 | Correct | 9 ms | 9000 KB | Output is correct |
30 | Correct | 20 ms | 11436 KB | Output is correct |
31 | Execution timed out | 8076 ms | 40860 KB | Time limit exceeded |
32 | Halted | 0 ms | 0 KB | - |