Submission #76788349
Source Code Expand
Copy
#include <stdio.h>#include <string.h>int H, W;char S[1024][1024];const int dyx[4][2] = {{ 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 }};int dir[1024][1024][4];int came_dir[1024][1024][4];int qs = 0, qe = 0;struct status_s {int y, x, dir; /* o, x の場合のみ dir を管理する */} q[1024 * 1024 * 4];char ans[1024 * 1024 * 4];int main(void) {int i, j;int sy = -1, sx = -1, gy = -1, gx = -1;if (scanf("%d%d", &H, &W) != 2) return 1;for (i = 0; i < H; i++) {if (scanf("%1023s", S[i]) != 1) return 1;for (j = 0; j < W; j++) {if (S[i][j] == 'S') { sy = i; sx = j; }if (S[i][j] == 'G') { gy = i; gx = j; }}}if (sy < 0 || gy < 0) {puts("f*ck");return 42;}memset(dir, -1, sizeof(dir));dir[sy][sx][0] = 72;q[qe++] = (struct status_s){ sy, sx, 0 };while (qs < qe) {struct status_s cur = q[qs++];for (i = 0; i < 4; i++) {int ny = cur.y + dyx[i][0], nx = cur.x + dyx[i][1];if (
#include <stdio.h>
#include <string.h>
int H, W;
char S[1024][1024];
const int dyx[4][2] = {{ 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 }};
int dir[1024][1024][4];
int came_dir[1024][1024][4];
int qs = 0, qe = 0;
struct status_s {
int y, x, dir; /* o, x の場合のみ dir を管理する */
} q[1024 * 1024 * 4];
char ans[1024 * 1024 * 4];
int main(void) {
int i, j;
int sy = -1, sx = -1, gy = -1, gx = -1;
if (scanf("%d%d", &H, &W) != 2) return 1;
for (i = 0; i < H; i++) {
if (scanf("%1023s", S[i]) != 1) return 1;
for (j = 0; j < W; j++) {
if (S[i][j] == 'S') { sy = i; sx = j; }
if (S[i][j] == 'G') { gy = i; gx = j; }
}
}
if (sy < 0 || gy < 0) {
puts("f*ck");
return 42;
}
memset(dir, -1, sizeof(dir));
dir[sy][sx][0] = 72;
q[qe++] = (struct status_s){ sy, sx, 0 };
while (qs < qe) {
struct status_s cur = q[qs++];
for (i = 0; i < 4; i++) {
int ny = cur.y + dyx[i][0], nx = cur.x + dyx[i][1];
if (
0 <= ny && ny < H && 0 <= nx && nx < W &&
S[ny][nx] != '#' &&
(S[cur.y][cur.x] != 'o' || cur.dir == i) &&
(S[cur.y][cur.x] != 'x' || cur.dir != i)
) {
int ndir = S[ny][nx] == 'o' || S[ny][nx] == 'x' ? i : 0;
if (dir[ny][nx][ndir] < 0) {
dir[ny][nx][ndir] = i;
came_dir[ny][nx][ndir] = cur.dir;
q[qe++] = (struct status_s){ ny, nx, ndir };
}
}
}
}
if (dir[gy][gx][0] < 0) {
puts("No");
} else {
char *pans = ans + sizeof(ans) - 1;
int y = gy, x = gx, d = 0;
while (dir[y][x][d] < 4) {
int cur_dir = dir[y][x][d];
int next_dir = came_dir[y][x][d];
if (cur_dir < 0) {
printf("ERROR!!!!! dir[%d][%d][%d] = %d\n", y, x, d, cur_dir);
return 72;
}
*(--pans) = "RLDU"[cur_dir];
y -= dyx[cur_dir][0];
x -= dyx[cur_dir][1];
d = next_dir;
}
puts("Yes");
puts(pans);
}
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | D - Go Straight |
| User | mikecat |
| Language | C23 (GCC 14.2.0) |
| Score | 425 |
| Code Size | 1892 Byte |
| Status | AC |
| Exec Time | 209 ms |
| Memory | 84648 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 425 / 425 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | example_00.txt, example_01.txt, example_02.txt |
| All | example_00.txt, example_01.txt, example_02.txt, hand_00.txt, hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, hand_06.txt, hand_07.txt, hand_08.txt, hand_09.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt, random_30.txt, random_31.txt, random_32.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| example_00.txt | AC | 7 ms | 17996 KiB |
| example_01.txt | AC | 7 ms | 17964 KiB |
| example_02.txt | AC | 7 ms | 17836 KiB |
| hand_00.txt | AC | 61 ms | 46652 KiB |
| hand_01.txt | AC | 11 ms | 22956 KiB |
| hand_02.txt | AC | 203 ms | 84648 KiB |
| hand_03.txt | AC | 209 ms | 84648 KiB |
| hand_04.txt | AC | 7 ms | 18024 KiB |
| hand_05.txt | AC | 61 ms | 46636 KiB |
| hand_06.txt | AC | 50 ms | 59396 KiB |
| hand_07.txt | AC | 59 ms | 46724 KiB |
| hand_08.txt | AC | 10 ms | 18860 KiB |
| hand_09.txt | AC | 7 ms | 17852 KiB |
| random_00.txt | AC | 10 ms | 19048 KiB |
| random_01.txt | AC | 99 ms | 51660 KiB |
| random_02.txt | AC | 92 ms | 49852 KiB |
| random_03.txt | AC | 10 ms | 18876 KiB |
| random_04.txt | AC | 97 ms | 51664 KiB |
| random_05.txt | AC | 70 ms | 45100 KiB |
| random_06.txt | AC | 10 ms | 19032 KiB |
| random_07.txt | AC | 10 ms | 18948 KiB |
| random_08.txt | AC | 78 ms | 47320 KiB |
| random_09.txt | AC | 82 ms | 48004 KiB |
| random_10.txt | AC | 75 ms | 45612 KiB |
| random_11.txt | AC | 83 ms | 47108 KiB |
| random_12.txt | AC | 82 ms | 47928 KiB |
| random_13.txt | AC | 9 ms | 19024 KiB |
| random_14.txt | AC | 82 ms | 48200 KiB |
| random_15.txt | AC | 15 ms | 31116 KiB |
| random_16.txt | AC | 10 ms | 19212 KiB |
| random_17.txt | AC | 10 ms | 19468 KiB |
| random_18.txt | AC | 10 ms | 20548 KiB |
| random_19.txt | AC | 10 ms | 20696 KiB |
| random_20.txt | AC | 10 ms | 18956 KiB |
| random_21.txt | AC | 23 ms | 35288 KiB |
| random_22.txt | AC | 10 ms | 19004 KiB |
| random_23.txt | AC | 10 ms | 19380 KiB |
| random_24.txt | AC | 21 ms | 35528 KiB |
| random_25.txt | AC | 13 ms | 25276 KiB |
| random_26.txt | AC | 10 ms | 19512 KiB |
| random_27.txt | AC | 78 ms | 50748 KiB |
| random_28.txt | AC | 10 ms | 19004 KiB |
| random_29.txt | AC | 15 ms | 25400 KiB |
| random_30.txt | AC | 45 ms | 40648 KiB |
| random_31.txt | AC | 36 ms | 39052 KiB |
| random_32.txt | AC | 14 ms | 23308 KiB |