Submission #74034626


Source Code Expand

Copy
#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 };
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#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
AC × 4
AC × 51
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


2026-03-13 (Fri)
00:52:20 +09:00