結果

問題 No.208 王将
コンテスト
ユーザー ゴリポン先生
提出日時 2026-02-28 21:30:53
言語 D
(dmd 2.112.0)
コンパイル:
dmd -fPIE -m64 -w -wi -O -release -inline -I/opt/dmd/src/druntime/import/ -I/opt/dmd/src/phobos -L-L/opt/dmd/linux/lib64/ -fPIC _filename_
実行:
./Main
結果
TLE  
実行時間 -
コード長 890 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 5,183 ms
コンパイル使用メモリ 197,808 KB
実行使用メモリ 122,164 KB
最終ジャッジ日時 2026-02-28 21:31:01
合計ジャッジ時間 8,270 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 9 TLE * 1 -- * 13
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

module main;
// 2次元グリッド、8近傍、幅優先探索
import std;

alias P = Tuple!(int, "r", int, "c");
void main()
{
	// 入力
	P king;
	readln.chomp.formattedRead("%d %d", king.r, king.c);
	P pawn;
	readln.chomp.formattedRead("%d %d", pawn.r, pawn.c);
	// 答えの計算と出力
	int[int][int] dist;
	dist[0][0] = 0;
	auto que = DList!P(P(0, 0));
	while (!que.empty) {
		P cur = que.front;
		que.removeFront;
		foreach (dr; [-1, 0, 1]) {
			foreach (dc; [-1, 0, 1]) {
				if (dr == 0 && dc == 0)
					continue;
				int nr = cur.r + dr, nc = cur.c + dc;
				if (nr == pawn.r && nc == pawn.c)
					continue;
				if (nr !in dist || nc !in dist[nr]) {
					dist[nr][nc] = dist[cur.r][cur.c] + 1;
					// 目的地に到達した場合
					if (nr == king.r && nc == king.c) {
						writeln(dist[nr][nc]);
						return;
					}
					que.insertBack(P(nr, nc));
				}
			}
		}
	}
}
0