Submission #8960674


Source Code Expand

#define _GLIBCXX_DEBUG
#include <bits/stdc++.h>
using namespace std;
using edge = pair<int, long long>;
using Graph = vector<vector<edge>>;
//#define int long long
int H, W, s, g;
long long T;
int idx (int h, int w) { return h * W + w; }
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};

Graph make_graph(const vector<string> &S, long long cost) {
    Graph G(H*W);
    for (int h = 0; h < H; h++) for (int w = 0; w < W; w++) {
        int from = idx(h, w);
        for (int i = 0; i < 4; i++) {
            int dh = h + dy[i], dw = w + dx[i];
            int to = idx(dh, dw);
            if (dh<0 || H<=dh || dw<0 || W<=dw) continue;
            if (S[dh][dw] == '#') G[from].emplace_back(to, cost);
            else G[from].emplace_back(to, 1LL);
        }
    }
    return G;
}

long long dijkstra(const vector<string> &S, long long cost){
    using Pi = pair<long long, int>;
    const long long INF = 1e18;
    Graph G = make_graph(S, cost);
    vector<long long> ret(G.size(), INF);
    priority_queue<Pi, vector<Pi>, greater<Pi>> que;
    ret[s] = 0;
    que.emplace(ret[s], s);
    while (!que.empty()) {
        long long dist;
        int node;
        tie(dist, node) = que.top();
        que.pop();
        if (ret[node] < dist) continue;
        for (auto &e : G[node]) {
            int next_node;
            long long next_dist;
            tie(next_node, next_dist) = e;
            if (ret[next_node] > ret[node] + next_dist) {
                ret[next_node] = ret[node] + next_dist;
                que.emplace(ret[next_node], next_node);
            }
        }
    }
    return ret[g];
}

signed main() {
    cin >> H >> W >> T;
    vector<string> S(H);
    for (int i = 0; i < H; i++) {
        cin >> S[i];
        for (int j = 0; j < W; j++) {
            if (S[i][j] == 'S') s = idx(i, j);
            if (S[i][j] == 'G') g = idx(i, j);
        }
    }
    
    long long ok = 0, ng = 1e18;
    while (abs(ok-ng) > 1) {
        long long mid = (ok+ng)/2;
        long long f = dijkstra(S, mid);
        if (f > T) ng = mid;
        else ok = mid;
        //cout << f << endl;
    }
    cout << ok << endl;
    return 0;
}

Submission Info

Submission Time
Task C - 壁抜け
User kya
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2239 Byte
Status AC
Exec Time 18 ms
Memory 256 KB

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3
Score / Max Score 0 / 0 40 / 40 30 / 30 30 / 30
Status
AC × 3
AC × 16
AC × 42
AC × 68
Set Name Test Cases
Sample subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt
Subtask1 subtask0_sample_01.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt
Subtask2 subtask0_sample_01.txt, subtask0_sample_02.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask2_16.txt, subtask2_17.txt, subtask2_18.txt, subtask2_19.txt, subtask2_20.txt, subtask2_21.txt, subtask2_22.txt, subtask2_23.txt, subtask2_24.txt, subtask2_25.txt, subtask2_26.txt, subtask2_27.txt, subtask2_28.txt, subtask2_29.txt, subtask2_30.txt, subtask2_31.txt, subtask2_32.txt, subtask2_33.txt, subtask2_34.txt, subtask2_35.txt, subtask2_36.txt, subtask2_37.txt, subtask2_38.txt, subtask2_39.txt, subtask2_40.txt
Subtask3 subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask2_16.txt, subtask2_17.txt, subtask2_18.txt, subtask2_19.txt, subtask2_20.txt, subtask2_21.txt, subtask2_22.txt, subtask2_23.txt, subtask2_24.txt, subtask2_25.txt, subtask2_26.txt, subtask2_27.txt, subtask2_28.txt, subtask2_29.txt, subtask2_30.txt, subtask2_31.txt, subtask2_32.txt, subtask2_33.txt, subtask2_34.txt, subtask2_35.txt, subtask2_36.txt, subtask2_37.txt, subtask2_38.txt, subtask2_39.txt, subtask2_40.txt, subtask3_41.txt, subtask3_42.txt, subtask3_43.txt, subtask3_44.txt, subtask3_45.txt, subtask3_46.txt, subtask3_47.txt, subtask3_48.txt, subtask3_49.txt, subtask3_50.txt, subtask3_51.txt, subtask3_52.txt, subtask3_53.txt, subtask3_54.txt, subtask3_55.txt, subtask3_56.txt, subtask3_57.txt, subtask3_58.txt, subtask3_59.txt, subtask3_60.txt, subtask3_61.txt, subtask3_62.txt, subtask3_63.txt, subtask3_64.txt, subtask3_65.txt
Case Name Status Exec Time Memory
subtask0_sample_01.txt AC 2 ms 256 KB
subtask0_sample_02.txt AC 2 ms 256 KB
subtask0_sample_03.txt AC 3 ms 256 KB
subtask1_01.txt AC 2 ms 256 KB
subtask1_02.txt AC 2 ms 256 KB
subtask1_03.txt AC 2 ms 256 KB
subtask1_04.txt AC 2 ms 256 KB
subtask1_05.txt AC 2 ms 256 KB
subtask1_06.txt AC 2 ms 256 KB
subtask1_07.txt AC 2 ms 256 KB
subtask1_08.txt AC 2 ms 256 KB
subtask1_09.txt AC 2 ms 256 KB
subtask1_10.txt AC 2 ms 256 KB
subtask1_11.txt AC 2 ms 256 KB
subtask1_12.txt AC 2 ms 256 KB
subtask1_13.txt AC 2 ms 256 KB
subtask1_14.txt AC 2 ms 256 KB
subtask1_15.txt AC 2 ms 256 KB
subtask2_16.txt AC 15 ms 256 KB
subtask2_17.txt AC 15 ms 256 KB
subtask2_18.txt AC 14 ms 256 KB
subtask2_19.txt AC 14 ms 256 KB
subtask2_20.txt AC 17 ms 256 KB
subtask2_21.txt AC 18 ms 256 KB
subtask2_22.txt AC 16 ms 256 KB
subtask2_23.txt AC 16 ms 256 KB
subtask2_24.txt AC 16 ms 256 KB
subtask2_25.txt AC 9 ms 256 KB
subtask2_26.txt AC 9 ms 256 KB
subtask2_27.txt AC 5 ms 256 KB
subtask2_28.txt AC 5 ms 256 KB
subtask2_29.txt AC 8 ms 256 KB
subtask2_30.txt AC 6 ms 256 KB
subtask2_31.txt AC 4 ms 256 KB
subtask2_32.txt AC 3 ms 256 KB
subtask2_33.txt AC 16 ms 256 KB
subtask2_34.txt AC 16 ms 256 KB
subtask2_35.txt AC 17 ms 256 KB
subtask2_36.txt AC 17 ms 256 KB
subtask2_37.txt AC 17 ms 256 KB
subtask2_38.txt AC 16 ms 256 KB
subtask2_39.txt AC 15 ms 256 KB
subtask2_40.txt AC 14 ms 256 KB
subtask3_41.txt AC 15 ms 256 KB
subtask3_42.txt AC 15 ms 256 KB
subtask3_43.txt AC 14 ms 256 KB
subtask3_44.txt AC 14 ms 256 KB
subtask3_45.txt AC 17 ms 256 KB
subtask3_46.txt AC 18 ms 256 KB
subtask3_47.txt AC 17 ms 256 KB
subtask3_48.txt AC 16 ms 256 KB
subtask3_49.txt AC 16 ms 256 KB
subtask3_50.txt AC 4 ms 256 KB
subtask3_51.txt AC 10 ms 256 KB
subtask3_52.txt AC 12 ms 256 KB
subtask3_53.txt AC 4 ms 256 KB
subtask3_54.txt AC 3 ms 256 KB
subtask3_55.txt AC 2 ms 256 KB
subtask3_56.txt AC 4 ms 256 KB
subtask3_57.txt AC 5 ms 256 KB
subtask3_58.txt AC 17 ms 256 KB
subtask3_59.txt AC 16 ms 256 KB
subtask3_60.txt AC 18 ms 256 KB
subtask3_61.txt AC 17 ms 256 KB
subtask3_62.txt AC 15 ms 256 KB
subtask3_63.txt AC 16 ms 256 KB
subtask3_64.txt AC 15 ms 256 KB
subtask3_65.txt AC 14 ms 256 KB