結果
| 問題 |
No.2328 Build Walls
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-05-28 14:14:34 |
| 言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 741 ms / 3,000 ms |
| コード長 | 1,488 bytes |
| コンパイル時間 | 11,321 ms |
| コンパイル使用メモリ | 291,452 KB |
| 最終ジャッジ日時 | 2025-02-13 11:06:32 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 34 |
ソースコード
#pragma GCC target("avx2")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
using namespace std;
using ll = long long int;
using ull = unsigned long long int;
using ld = long double;
ll MOD = 998244353;
ll MAX = 1e18;
vector<ll> dx = {0,0,1,1,1,-1,-1,-1},dy = {1,-1,0,1,-1,0,1,-1};
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll H,W;
cin >> H >> W;
vector<vector<ll>> A(H,vector<ll>(W,-1));
for(ll i = 1;i < H - 1;i++){
for(ll j = 0;j < W;j++){
cin >> A[i][j];
}
}
vector<vector<ll>> memo(H,vector<ll>(W,-1));
priority_queue<tuple<ll,ll,ll>,vector<tuple<ll,ll,ll>>,greater<tuple<ll,ll,ll>>> que;
for(ll i = 0;i < H;i++){
if(A[i][0] != -1){
que.push(make_tuple(A[i][0],i,0));
}
}
ll ans = MAX;
while(!que.empty()){
ll cost,x,y;
tie(cost,x,y) = que.top();
que.pop();
if(memo[x][y] == -1){
memo[x][y] = cost;
if(y == W - 1){
ans = min(ans,cost);
continue;
}
for(ll i = 0;i < 8;i++){
ll nx = x + dx[i],ny = y + dy[i];
if(nx < 0 || nx >= H || ny < 0 || ny >= W) continue;
if(A[nx][ny] == -1) continue;
que.push(make_tuple(cost + A[nx][ny],nx,ny));
}
}
}
if(ans == MAX) cout << -1 << endl;
else cout << ans << endl;
}