結果

問題 No.2328 Build Walls
ユーザー InTheBloom
提出日時 2023-07-21 13:15:24
言語 D
(dmd 2.109.1)
結果
WA  
実行時間 -
コード長 2,693 bytes
コンパイル時間 4,002 ms
コンパイル使用メモリ 187,392 KB
実行使用メモリ 155,392 KB
最終ジャッジ日時 2024-09-21 15:17:49
合計ジャッジ時間 20,780 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 3
other WA * 34
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import std;
// ()
struct node {
int y;
int x;
int weight;
}
void main () {
// input
int H, W; readln.read(H, W);
int[][] A = new int[][](H-2, 0);
foreach (i; 0..H-2) {
A[i] = 0 ~ readln.split.to!(int[]);
}
//
int[] dxy = [-1, 0, 1];
node[][][] graph = new node[][][](H-2, W+1, 0);
foreach (i; 0..H-2) {
foreach (j; 0..W+1) {
// 8
foreach (dy; dxy) {
foreach (dx; dxy) {
if (dy == 0 && dx == 0) {
continue;
}
if (H-2 <= i+dy || W+1 <= j+dx || i+dy < 0 || j+dx < 0) {
continue;
}
if (A[i+dy][j+dx] == -1) {
continue;
}
graph[i][j] ~= node(i+dy, j+dx, A[i+dy][j+dx]);
}
}
}
}
solve(H, W, A, graph);
}
struct toNode {
int y;
int x;
int totalCost;
}
void solve (int H, int W, int[][] A, node[][][] graph) {
int[][] comfirmedCost = new int[][](H-2, W+1);
foreach (ref c; comfirmedCost) {
c[] = int.max;
}
BinaryHeap!(Array!toNode, "a.totalCost > b.totalCost") PQ;
//
PQ.insert(toNode(0, 0, 0));
int count = 0;
int all = 0;
while (!PQ.empty) {
all++;
auto shortest = PQ.front; PQ.removeFront;
if (comfirmedCost[shortest.y][shortest.x] < shortest.totalCost) {
count++;
continue;
}
comfirmedCost[shortest.y][shortest.x] = shortest.totalCost;
//
foreach (to; graph[shortest.y][shortest.x]) {
if (to.weight + shortest.totalCost < comfirmedCost[to.y][to.x]) {
PQ.insert(toNode(to.y, to.x, to.weight + shortest.totalCost));
comfirmedCost[to.y][to.x] = to.weight + shortest.totalCost;
}
}
}
writeln("count = ", count);
writeln("all = ", all);
//
int ans = int.max;
foreach (i; 0..H-2) {
ans = min(ans, comfirmedCost[i][W]);
}
if (ans == int.max) {
writeln(-1);
} else {
writeln(ans);
}
}
void read(T...)(string S, ref T args) {
auto buf = S.split;
foreach (i, ref arg; args) {
arg = buf[i].to!(typeof(arg));
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0