Submission #74034626
Source Code Expand
Copy
#include <stdio.h>#include <stdlib.h>#define INF 1010101010int H, W;char S[1024][1024];struct edge_s {int to, cost;};int ec[1024 * 1024 + 100];struct edge_s* es[1024 * 1024 + 100];void ae(int f, int t, int c) {es[f] = realloc(es[f], sizeof(*es[f]) * (ec[f] + 1));if (es[f] == NULL) exit(2);es[f][ec[f]++] = (struct edge_s){ t, c };}
#include <stdio.h>
#include <stdlib.h>
#define INF 1010101010
int H, W;
char S[1024][1024];
struct edge_s {
int to, cost;
};
int ec[1024 * 1024 + 100];
struct edge_s* es[1024 * 1024 + 100];
void ae(int f, int t, int c) {
es[f] = realloc(es[f], sizeof(*es[f]) * (ec[f] + 1));
if (es[f] == NULL) exit(2);
es[f][ec[f]++] = (struct edge_s){ t, c };
}
void try_ae(int fy, int fx, int ty, int tx) {
if (fy < 0 || H <= fy || fx < 0 || W <= fx) return;
if (ty < 0 || H <= ty || tx < 0 || W <= tx) return;
if (S[fy][fx] == '#' || S[ty][tx] == '#') return;
ae(fy * W + fx, ty * W + tx, 1);
}
int mincost[1024 * 1024 + 100];
int q[(1024 * 1024 * 6 + 30 * 1024 * 1024) * 2];
int main(void) {
int i, j;
int qs = 1024 * 1024 * 6 + 30 * 1024 * 1024;
int qe = qs;
if (scanf("%d%d", &H, &W) != 2) return 1;
for (i = 0; i < H; i++) {
if (scanf("%1023s", S[i]) != 1) return 1;
}
for (i = 0; i < H; i++) {
for (j = 0; j < W; j++) {
try_ae(i, j, i - 1, j);
try_ae(i, j, i + 1, j);
try_ae(i, j, i, j - 1);
try_ae(i, j, i, j + 1);
if ('a' <= S[i][j] && S[i][j] < 'a' + 26) {
int id = S[i][j] - 'a';
int cur = i * W + j;
int meta = H * W + id;
ae(cur, meta, 1);
ae(meta, cur, 0);
}
}
}
/* コストが0か1しかないとき、0ならunshiftすることでダイクストラ法を回避するやつ */
for (i = 0; i < H * W + 26; i++) mincost[i] = INF;
mincost[0] = 0;
q[qe++] = 0;
while (qs < qe) {
int cur = q[qs++];
for (i = 0; i < ec[cur]; i++) {
if (mincost[cur] + es[cur][i].cost < mincost[es[cur][i].to]) {
mincost[es[cur][i].to] = mincost[cur] + es[cur][i].cost;
if (es[cur][i].cost == 0) {
q[--qs] = es[cur][i].to;
} else {
q[qe++] = es[cur][i].to;
}
}
}
}
printf("%d\n", mincost[H * W - 1] < INF ? mincost[H * W - 1] : -1);
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | D - Teleport Maze |
| User | mikecat |
| Language | C23 (GCC 14.2.0) |
| Score | 400 |
| Code Size | 1912 Byte |
| Status | AC |
| Exec Time | 195 ms |
| Memory | 76904 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 400 / 400 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt, 01_random_33.txt, 01_random_34.txt, 01_random_35.txt, 01_random_36.txt, 01_random_37.txt, 01_random_38.txt, 01_random_39.txt, 02_handmade_00.txt, 02_handmade_01.txt, 02_handmade_02.txt, 02_handmade_03.txt, 02_handmade_04.txt, 02_handmade_05.txt, 02_handmade_06.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 1660 KiB |
| 00_sample_01.txt | AC | 0 ms | 1760 KiB |
| 00_sample_02.txt | AC | 0 ms | 1736 KiB |
| 00_sample_03.txt | AC | 1 ms | 1820 KiB |
| 01_random_00.txt | AC | 0 ms | 1792 KiB |
| 01_random_01.txt | AC | 64 ms | 33948 KiB |
| 01_random_02.txt | AC | 94 ms | 69064 KiB |
| 01_random_03.txt | AC | 187 ms | 76644 KiB |
| 01_random_04.txt | AC | 103 ms | 69092 KiB |
| 01_random_05.txt | AC | 150 ms | 74976 KiB |
| 01_random_06.txt | AC | 114 ms | 69344 KiB |
| 01_random_07.txt | AC | 106 ms | 69116 KiB |
| 01_random_08.txt | AC | 1 ms | 1736 KiB |
| 01_random_09.txt | AC | 31 ms | 18960 KiB |
| 01_random_10.txt | AC | 87 ms | 51516 KiB |
| 01_random_11.txt | AC | 195 ms | 66684 KiB |
| 01_random_12.txt | AC | 95 ms | 51868 KiB |
| 01_random_13.txt | AC | 92 ms | 51728 KiB |
| 01_random_14.txt | AC | 97 ms | 51892 KiB |
| 01_random_15.txt | AC | 95 ms | 51516 KiB |
| 01_random_16.txt | AC | 1 ms | 1760 KiB |
| 01_random_17.txt | AC | 12 ms | 8368 KiB |
| 01_random_18.txt | AC | 52 ms | 37780 KiB |
| 01_random_19.txt | AC | 150 ms | 54032 KiB |
| 01_random_20.txt | AC | 132 ms | 54160 KiB |
| 01_random_21.txt | AC | 141 ms | 57160 KiB |
| 01_random_22.txt | AC | 70 ms | 43080 KiB |
| 01_random_23.txt | AC | 109 ms | 48072 KiB |
| 01_random_24.txt | AC | 0 ms | 1820 KiB |
| 01_random_25.txt | AC | 8 ms | 5524 KiB |
| 01_random_26.txt | AC | 42 ms | 29440 KiB |
| 01_random_27.txt | AC | 118 ms | 50324 KiB |
| 01_random_28.txt | AC | 103 ms | 46408 KiB |
| 01_random_29.txt | AC | 86 ms | 40192 KiB |
| 01_random_30.txt | AC | 99 ms | 44288 KiB |
| 01_random_31.txt | AC | 99 ms | 43748 KiB |
| 01_random_32.txt | AC | 0 ms | 1800 KiB |
| 01_random_33.txt | AC | 18 ms | 12052 KiB |
| 01_random_34.txt | AC | 28 ms | 21908 KiB |
| 01_random_35.txt | AC | 59 ms | 32636 KiB |
| 01_random_36.txt | AC | 36 ms | 24932 KiB |
| 01_random_37.txt | AC | 35 ms | 24568 KiB |
| 01_random_38.txt | AC | 50 ms | 29184 KiB |
| 01_random_39.txt | AC | 48 ms | 28032 KiB |
| 02_handmade_00.txt | AC | 94 ms | 69148 KiB |
| 02_handmade_01.txt | AC | 102 ms | 76904 KiB |
| 02_handmade_02.txt | AC | 16 ms | 6684 KiB |
| 02_handmade_03.txt | AC | 16 ms | 6620 KiB |
| 02_handmade_04.txt | AC | 41 ms | 33992 KiB |
| 02_handmade_05.txt | AC | 90 ms | 67964 KiB |
| 02_handmade_06.txt | AC | 156 ms | 74340 KiB |