結果
問題 | No.2411 Reverse Directions |
ユーザー | chro_96 |
提出日時 | 2023-08-11 23:08:05 |
言語 | C (gcc 12.3.0) |
結果 |
AC
|
実行時間 | 16 ms / 2,000 ms |
コード長 | 3,988 bytes |
コンパイル時間 | 1,374 ms |
コンパイル使用メモリ | 33,824 KB |
実行使用メモリ | 8,452 KB |
最終ジャッジ日時 | 2024-11-18 18:25:29 |
合計ジャッジ時間 | 2,061 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 3 ms
8,304 KB |
testcase_01 | AC | 3 ms
8,388 KB |
testcase_02 | AC | 3 ms
8,376 KB |
testcase_03 | AC | 4 ms
8,360 KB |
testcase_04 | AC | 6 ms
8,324 KB |
testcase_05 | AC | 3 ms
8,280 KB |
testcase_06 | AC | 2 ms
8,360 KB |
testcase_07 | AC | 6 ms
8,356 KB |
testcase_08 | AC | 4 ms
8,308 KB |
testcase_09 | AC | 4 ms
8,332 KB |
testcase_10 | AC | 11 ms
8,316 KB |
testcase_11 | AC | 3 ms
8,284 KB |
testcase_12 | AC | 15 ms
8,260 KB |
testcase_13 | AC | 4 ms
8,296 KB |
testcase_14 | AC | 8 ms
8,452 KB |
testcase_15 | AC | 5 ms
8,400 KB |
testcase_16 | AC | 4 ms
8,284 KB |
testcase_17 | AC | 7 ms
8,308 KB |
testcase_18 | AC | 4 ms
8,368 KB |
testcase_19 | AC | 4 ms
8,308 KB |
testcase_20 | AC | 7 ms
8,256 KB |
testcase_21 | AC | 8 ms
8,316 KB |
testcase_22 | AC | 12 ms
8,440 KB |
testcase_23 | AC | 4 ms
8,300 KB |
testcase_24 | AC | 15 ms
8,324 KB |
testcase_25 | AC | 3 ms
8,436 KB |
testcase_26 | AC | 4 ms
8,408 KB |
testcase_27 | AC | 6 ms
8,444 KB |
testcase_28 | AC | 9 ms
8,380 KB |
testcase_29 | AC | 16 ms
8,280 KB |
testcase_30 | AC | 11 ms
8,356 KB |
testcase_31 | AC | 12 ms
8,412 KB |
ソースコード
#include <stdio.h> int dmap[4][2] = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } }; char dchar[4] = { 'U', 'D', 'L', 'R' }; int main () { int h = 0; int w = 0; int k = 0; int l = 0; int r = 0; char s[500][501] = {}; int res = 0; int is_ok = 0; char t[500001] = ""; int d[500][500][2] = {}; int prev[500][500][2] = {}; int q[250000][2] = {}; int q_hd = 0; int q_tl = 0; res = scanf("%d", &h); res = scanf("%d", &w); res = scanf("%d", &k); res = scanf("%d", &l); res = scanf("%d", &r); for (int i = 0; i < h; i++) { res = scanf("%s", s[i]); } if ((r-l)%2 == 0) { printf("No\n"); return 0; } for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { d[i][j][0] = h*w; d[i][j][1] = h*w; } } d[0][0][0] = 0; q[q_tl][0] = 0; q[q_tl][1] = 0; prev[0][0][0] = -1; q_tl++; while (q_hd < q_tl) { int ci = q[q_hd][0]; int cj = q[q_hd][1]; int tmp_d = d[ci][cj][0]; q_hd++; for (int i = 0; i < 4; i++) { int ni = ci+dmap[i][0]; int nj = cj+dmap[i][1]; if (ni >= 0 && ni < h && nj >= 0 && nj < w && s[ni][nj] == '.' && d[ni][nj][0] >= h*w) { d[ni][nj][0] = tmp_d+1; prev[ni][nj][0] = i; q[q_tl][0] = ni; q[q_tl][1] = nj; q_tl++; } } } q_hd = 0; q_tl = 0; d[h-1][w-1][1] = 0; q[q_tl][0] = h-1; q[q_tl][1] = w-1; prev[h-1][w-1][1] = -1; q_tl++; while (q_hd < q_tl) { int ci = q[q_hd][0]; int cj = q[q_hd][1]; int tmp_d = d[ci][cj][1]; q_hd++; for (int i = 0; i < 4; i++) { int ni = ci+dmap[i][0]; int nj = cj+dmap[i][1]; if (ni >= 0 && ni < h && nj >= 0 && nj < w && s[ni][nj] == '.' && d[ni][nj][1] >= h*w) { d[ni][nj][1] = tmp_d+1; prev[ni][nj][1] = i; q[q_tl][0] = ni; q[q_tl][1] = nj; q_tl++; } } } for (int i = 0; i < h; i++) { for (int j = 1; j < w-1; j++) { if (is_ok <= 0 && d[i][j][0] < h*w && d[i][j][0] < l && d[i][j][0]%2 != l%2 && s[i][j-1] == '.' && s[i][j+1] == '.' && d[i][j][1] < h*w && d[i][j][1] <= k-r && d[i][j][1]%2 == (k-r)%2) { int ti = i; int tj = j; is_ok = 1; for (int p = d[i][j][0]; p > 0; p--) { int ni = ti+dmap[((prev[ti][tj][0])^1)][0]; int nj = tj+dmap[((prev[ti][tj][0])^1)][1]; t[p-1] = dchar[prev[ti][tj][0]]; ti = ni; tj = nj; } for (int p = d[i][j][0]; p < k-d[i][j][1]; p++) { t[p] = dchar[2+p%2]; } ti = i; tj = j; for (int p = k-d[i][j][1]; p < k; p++) { int ni = ti+dmap[((prev[ti][tj][1])^1)][0]; int nj = tj+dmap[((prev[ti][tj][1])^1)][1]; t[p] = dchar[((prev[ti][tj][1])^1)]; ti = ni; tj = nj; } t[k] = '\0'; } } } for (int i = 1; i < h-1; i++) { for (int j = 0; j < w; j++) { if (is_ok <= 0 && d[i][j][0] < h*w && d[i][j][0] < l && d[i][j][0]%2 != l%2 && s[i-1][j] == '.' && s[i+1][j] == '.' && d[i][j][1] < h*w && d[i][j][1] <= k-r && d[i][j][1]%2 == (k-r)%2) { int ti = i; int tj = j; is_ok = 1; for (int p = d[i][j][0]; p > 0; p--) { int ni = ti+dmap[((prev[ti][tj][0])^1)][0]; int nj = tj+dmap[((prev[ti][tj][0])^1)][1]; t[p-1] = dchar[prev[ti][tj][0]]; ti = ni; tj = nj; } for (int p = d[i][j][0]; p < k-d[i][j][1]; p++) { t[p] = dchar[p%2]; } ti = i; tj = j; for (int p = k-d[i][j][1]; p < k; p++) { int ni = ti+dmap[((prev[ti][tj][1])^1)][0]; int nj = tj+dmap[((prev[ti][tj][1])^1)][1]; t[p] = dchar[((prev[ti][tj][1])^1)]; ti = ni; tj = nj; } t[k] = '\0'; } } } if (is_ok > 0) { printf("Yes\n%s\n", t); } else { printf("No\n"); } return 0; }