# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
136499 | 2019-07-25T11:28:16 Z | sebinkim | Connect (CEOI06_connect) | C++14 | 31 ms | 17016 KB |
#include <bits/stdc++.h> using namespace std; int D[1010][9090]; char S[33][99]; int n, m; int main() { int i, j, x, y, t, k, v; scanf("%d%d\n", &n, &m); for(i=0; i<n; i++){ fgets(S[i], 88, stdin); } n /= 2; m /= 2; for(i=0; i<=n*m; i++){ for(j=0; j<(1<<n+1); j++){ D[i][j] = 1e9; } } D[0][0] = 0; for(i=0; i<n*m; i++){ x = i % n << 1 | 1; y = i / n << 1 | 1; for(j=0; j<(1<<n+1); j++){ if(S[x][y] == 'X'){ v = 1; if((j & 3) == 3) k = 0; else if(j & 3) k = 1; else k = 2; } else{ v = 2; if((j & 3) == 3) k = 1; else if(j & 3) k = 2; else k = 5; } if(k & 1){ t = j >> 1 & ~1; D[i + 1][t] = min(D[i + 1][t], D[i][j] + (k > 1? 0 : v)); } if(k & 2){ if(S[x + 1][y] != '-'){ t = j >> 1 | 1; D[i + 1][t] = min(D[i + 1][t], D[i][j] + v); } if(S[x][y + 1] != '|'){ t = j >> 1 & ~1 | 1 << n; D[i + 1][t] = min(D[i + 1][t], D[i][j] + v); } } if(k & 4){ if(S[x + 1][y] != '-' && S[x][y + 1] != '|'){ t = j >> 1 | 1 | 1 << n; D[i + 1][t] = min(D[i + 1][t], D[i][j] + v); } } } } for(i=n*m, j=0; i; i--){ x = (i - 1) % n << 1 | 1; y = (i - 1) / n << 1 | 1; t = j & ~1 & ~(1 << n); if(S[x][y] == 'X'){ v = 1; if((j & 1) || (j & 1 << n)) k = 1; else k = 2; } else{ v = 2; if((j & 1) && (j & 1 << n)) k = 1; else if((j & 1) || (j & 1 << n)) k = 2; else k = 4; } if(k & 1){ if(S[x][y] == ' ') S[x][y] = '.'; j = t << 1; } if(k & 2){ if(S[x][y] == ' ') S[x][y] = '.'; if(D[i - 1][t << 1 | 2] + v == D[i][j]){ S[x][y - 1] = '.'; j = t << 1 | 2; } else{ S[x - 1][y] = '.'; j = t << 1 | 1; } } if(k & 4){ if(D[i - 1][t << 1] == D[i][j]) j = t << 1; else{ S[x][y] = S[x - 1][y] = S[x][y - 1] = '.'; j = t << 1 | 3; } } } printf("%d\n", D[n * m][0]); for(i=0; i<=n+n; i++){ printf("%s", S[i]); } return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 504 KB | Output is correct |
2 | Correct | 2 ms | 504 KB | Output is correct |
3 | Correct | 2 ms | 632 KB | Output is correct |
4 | Correct | 3 ms | 1144 KB | Output is correct |
5 | Correct | 10 ms | 5496 KB | Output is correct |
6 | Correct | 3 ms | 1148 KB | Output is correct |
7 | Correct | 2 ms | 888 KB | Output is correct |
8 | Correct | 3 ms | 1272 KB | Output is correct |
9 | Correct | 3 ms | 1660 KB | Output is correct |
10 | Correct | 4 ms | 2168 KB | Output is correct |
11 | Correct | 5 ms | 1912 KB | Output is correct |
12 | Correct | 6 ms | 3192 KB | Output is correct |
13 | Correct | 7 ms | 3292 KB | Output is correct |
14 | Correct | 9 ms | 5112 KB | Output is correct |
15 | Correct | 11 ms | 6136 KB | Output is correct |
16 | Correct | 14 ms | 8028 KB | Output is correct |
17 | Correct | 18 ms | 8952 KB | Output is correct |
18 | Correct | 30 ms | 17016 KB | Output is correct |
19 | Correct | 31 ms | 17016 KB | Output is correct |
20 | Correct | 29 ms | 17016 KB | Output is correct |