結果
問題 | No.2412 YOU Grow Bigger! |
ユーザー | chro_96 |
提出日時 | 2023-08-11 23:49:19 |
言語 | C (gcc 12.3.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,685 bytes |
コンパイル時間 | 246 ms |
コンパイル使用メモリ | 33,276 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-18 19:36:57 |
合計ジャッジ時間 | 2,609 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | RE | - |
testcase_01 | AC | 3 ms
6,816 KB |
testcase_02 | AC | 2 ms
6,820 KB |
testcase_03 | AC | 157 ms
6,816 KB |
testcase_04 | AC | 158 ms
6,816 KB |
testcase_05 | AC | 99 ms
6,820 KB |
testcase_06 | AC | 134 ms
6,816 KB |
testcase_07 | AC | 158 ms
6,816 KB |
testcase_08 | AC | 131 ms
6,820 KB |
testcase_09 | AC | 3 ms
6,816 KB |
testcase_10 | RE | - |
testcase_11 | AC | 2 ms
6,816 KB |
testcase_12 | AC | 2 ms
6,820 KB |
testcase_13 | RE | - |
testcase_14 | RE | - |
testcase_15 | AC | 3 ms
6,816 KB |
testcase_16 | AC | 2 ms
6,820 KB |
testcase_17 | AC | 2 ms
6,816 KB |
testcase_18 | RE | - |
testcase_19 | AC | 2 ms
6,816 KB |
testcase_20 | AC | 2 ms
6,820 KB |
testcase_21 | RE | - |
testcase_22 | RE | - |
testcase_23 | RE | - |
testcase_24 | RE | - |
testcase_25 | AC | 30 ms
6,820 KB |
testcase_26 | RE | - |
testcase_27 | RE | - |
testcase_28 | RE | - |
testcase_29 | AC | 3 ms
6,816 KB |
testcase_30 | RE | - |
ソースコード
#include <stdio.h> int dmap[8][2] = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 }, { -1, -1 }, { -1, 1 }, { 1, -1 }, { 1, 1 } }; int main () { int h = 0; int w = 0; char s[400][401] = {}; int res = 0; int is_ok = 0; int r[400][400] = {}; int org_flag[400][400] = {}; int flag[400][400] = {}; int q[2400][2] = {}; int q_hd = 0; int q_tl = 0; res = scanf("%d", &h); res = scanf("%d", &w); for (int i = 0; i < h; i++) { res = scanf("%s", s[i]); } for (int i = 0; i < h-2; i++) { for (int j = 0; j < w-2; j++) { for (int k = 0; k < 3; k++) { for (int l = 0; l < 3; l++) { if (s[i+k][j+l] == '#') { flag[i][j] = 1; org_flag[i][j] = 1; } } } } } r[0][0] = 1; q[q_tl][0] = 0; q[q_tl][1] = 0; q_tl++; while (q_hd < q_tl) { int ci = q[q_hd][0]; int cj = q[q_hd][1]; q_hd++; for (int i = 0; i < 8; i++) { int ni = ci+dmap[i][0]; int nj = cj+dmap[i][1]; if (ni >= 0 && ni < h-2 && nj >= 0 && nj < w-2 && flag[ni][nj] == 0 && r[ni][nj] <= 0) { r[ni][nj] = 1; q[q_tl][0] = ni; q[q_tl][1] = nj; q_tl++; } } } if (r[h-3][w-3] <= 0) { printf("0\n"); return 0; } for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { if ((i > 2 || j > 2) && (i < h-3 || j < w-3) && s[i][j] == '.') { for (int k = 0; k < 3; k++) { for (int l = 0; l < 3; l++) { if (i-k >= 0 && i-k < h-2 && j-l >= 0 && j-l < w-2) { flag[i-k][j-l] = 1; } } } for (int i = 0; i < h-2; i++) { for (int j = 0; j < w-2; j++) { r[i][j] = 0; } } q_hd = 0; q_tl = 0; r[0][0] = 1; q[q_tl][0] = 0; q[q_tl][1] = 0; q_tl++; while (q_hd < q_tl) { int ci = q[q_hd][0]; int cj = q[q_hd][1]; q_hd++; for (int i = 0; i < 8; i++) { int ni = ci+dmap[i][0]; int nj = cj+dmap[i][1]; if (ni >= 0 && ni < h-2 && nj >= 0 && nj < w-2 && flag[ni][nj] == 0 && r[ni][nj] <= 0) { r[ni][nj] = 1; q[q_tl][0] = ni; q[q_tl][1] = nj; q_tl++; } } } if (r[h-3][w-3] <= 0) { is_ok = 1; } for (int i = 0; i < h-2; i++) { for (int j = 0; j < w-2; j++) { flag[i][j] = org_flag[i][j]; } } } } } if (is_ok > 0) { return 1; } else { printf("2\n"); } return 0; }