結果

問題 No.971 いたずらっ子
ユーザー y61mpnly61mpnl
提出日時 2020-01-17 22:29:15
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
OLE  
実行時間 -
コード長 1,322 bytes
コンパイル時間 2,027 ms
コンパイル使用メモリ 175,636 KB
実行使用メモリ 97,792 KB
最終ジャッジ日時 2024-06-25 21:55:49
合計ジャッジ時間 9,781 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 OLE -
testcase_01 OLE -
testcase_02 OLE -
testcase_03 OLE -
testcase_04 OLE -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
struct P {
        ll x, y, bs, dist;
};

int main(){
        ll h, w; scanf("%lld %lld", &h, &w);
        vector<vector<ll>> fig(h, vector<ll>(w));
        for(ll i=0; i<h; i++){
                string s; cin>>s;
                for(ll j=0; j<w; j++) fig[i][j] = (s[j]=='k');
        }

        ll dx[] = {0, 1, 0, -1};
        ll dy[] = {1, 0, -1, 0};

        vector<vector<ll>> ans(h, vector<ll>(w, 1e11)), used(h, vector<ll>(w, 0));

        queue<P> que;
        P p = {0, 0, -1, 0};
        que.push(p);
        while(!que.empty()){
                p = que.front(); que.pop();
                used[p.x][p.y] = 1;
                if(fig[p.x][p.y]) p.dist += p.dist-p.bs;
                if(ans[p.x][p.y]<=p.dist) continue;
                ans[p.x][p.y] = p.dist;
                for(ll i=0; i<4; i++){
                        ll tx = p.x-dx[i], ty = p.y-dy[i];
                        if(0<=tx && tx<h and 0<=ty && ty<w){
                                P np = {tx, ty, p.bs+fig[tx][ty], p.dist+1};
                                que.push(np);
                        }
                }
        }

        for(ll i=0; i<h; i++){for(ll j=0; j<w; j++)printf("%lld ", ans[i][j]);puts("");}
        printf("%lld\n", ans[h-1][w-1]);
        return 0;
}
0