답안 #583555

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
583555 2022-06-25T14:40:59 Z Trent Mecho (IOI09_mecho) C++17
23 / 100
217 ms 7056 KB
#include "bits/stdc++.h"
#include "ext/pb_ds/assoc_container.hpp"

using namespace std;
using namespace __gnu_pbds;
#define ll long long
#define open(g) string _name_ = g; freopen((_name_ + ".in").c_str(), "r", stdin); freopen((_name_ + ".out").c_str(), "w", stdout)
#define printArr(a, len) for(int asdf = 0; asdf < (len); ++asdf) cout << (a)[asdf] << ' '; cout << '\n';
#define boost() cin.sync_with_stdio(0); cin.tie(0)
#define forR(i, x) for(int i = 0; i < x; ++i)
#define REP(i, a, b) for(int i = (a); i < (b); ++i)
#define all(i) i.begin(), i.end()
#define pii pair<int, int>
#define vi vector<int>
#define si set<int>
#define usi unordered_set<int>
#define mii map<int, int>
#define umii unordered_map<int, int>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")

const int MN = 810, INF = 1e9 + 10;
struct coord{int r, c;};
struct bear{int r, c, sl;};
bool vis[MN][MN];
int bee[MN][MN], ber[MN][MN]; // minimum # of minutes needed to end here
char grid[MN][MN];
int dir[4][2] = {{1, 0}, {0, 1}, {0, -1}, {-1, 0}};
int n, s;
int mr, mc;

bool ib(int r, int c){return 0 <= r && r < n && 0 <= c && c < n;}
bool iv(int r, int c){return ib(r, c) && grid[r][c] != 'T';}

// t = number of minutes bear eats
bool pos(int t){
    if(bee[mr][mc] <= t) return false;
    deque<bear> bfs = {{mr, mc, 0}};
    forR(a, MN) forR(b, MN) vis[a][b] = false;
    forR(a, MN) forR(b, MN) ber[a][b] = 0;
    ber[mr][mc] = t;
    vis[mr][mc] = true;
    while(!bfs.empty()){
        auto [r, c, sl] = bfs.front();
        bfs.pop_front();
        if(!(sl > 0 || ber[r][c] < bee[r][c])){
            cout << r << ' ' << c << ' ' << sl << '\n';
            cout << "bad";
        }
        if(grid[r][c] == 'D') {
            return true;
        }
        for(auto [rc, cc] : dir){
            auto [nr, nc] = pii{r+rc, c+cc};
            int dis = ber[r][c] + (sl == 0);
            int nsl = sl == 0 ? s - 1 : sl - 1;
            // cout << r << ' ' << c << ' ' << sl << ' ' << nr << ' ' << nc << ' ' << dis << ' ' << bee[nr][nc] << '\n';
            if(iv(nr, nc) && grid[nr][nc] != 'H' && !vis[nr][nc] && (nsl != 0 || dis < bee[nr][nc])){
                ber[nr][nc] = dis;
                vis[nr][nc] = true;
                bfs.push_back({nr, nc, nsl});
            }
        }
    }
    return false;
}

signed main() {
    cin >> n >> s;
    deque<coord> bfs;
    forR(r, n) forR(c, n){
        cin >> grid[r][c];
        if(grid[r][c] == 'H') {
            bfs.push_back({r, c});
            vis[r][c] = true;
        } else if(grid[r][c] == 'M'){
            mr=r, mc=c;
        }
    }
    while(!bfs.empty()){
        auto [r, c] = bfs.front();
        bfs.pop_front();
        for(auto [cr, cc] : dir){
            auto [nr, nc] = pii {r + cr, c + cc};
            if(iv(nr, nc) && grid[nr][nc] != 'D' && !vis[nr][nc]){
                vis[nr][nc] = true;
                bee[nr][nc] = bee[r][c] + 1;
                bfs.push_back({nr, nc});
            }
        }
    }
    forR(r, MN) forR(c, MN) if(!vis[r][c]) bee[r][c] = INF;
    if(!pos(0)) cout << "-1\n";
    else {
        // TODO fix hi
        int lo=0, hi=MN * MN;
        while(hi - lo > 1){
            int mid = (lo + hi) / 2;
            if(pos(mid)) lo = mid;
            else hi = mid;
        }
        cout << lo << '\n';
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5972 KB Output is correct
2 Correct 4 ms 5972 KB Output is correct
3 Correct 4 ms 5972 KB Output is correct
4 Correct 4 ms 5972 KB Output is correct
5 Incorrect 3 ms 5972 KB Output isn't correct
6 Incorrect 4 ms 6100 KB Output isn't correct
7 Incorrect 135 ms 6928 KB Output isn't correct
8 Correct 3 ms 6100 KB Output is correct
9 Correct 4 ms 6100 KB Output is correct
10 Correct 4 ms 6100 KB Output is correct
11 Incorrect 4 ms 6100 KB Output isn't correct
12 Correct 4 ms 6100 KB Output is correct
13 Correct 3 ms 6100 KB Output is correct
14 Incorrect 4 ms 6140 KB Output isn't correct
15 Correct 4 ms 6100 KB Output is correct
16 Incorrect 5 ms 6100 KB Output isn't correct
17 Correct 5 ms 6100 KB Output is correct
18 Incorrect 5 ms 6100 KB Output isn't correct
19 Correct 5 ms 6100 KB Output is correct
20 Incorrect 5 ms 6100 KB Output isn't correct
21 Correct 4 ms 6100 KB Output is correct
22 Incorrect 5 ms 6100 KB Output isn't correct
23 Correct 5 ms 6100 KB Output is correct
24 Incorrect 4 ms 6100 KB Output isn't correct
25 Correct 4 ms 6100 KB Output is correct
26 Incorrect 4 ms 6104 KB Output isn't correct
27 Correct 5 ms 6100 KB Output is correct
28 Incorrect 5 ms 6128 KB Output isn't correct
29 Correct 6 ms 6100 KB Output is correct
30 Incorrect 4 ms 6100 KB Output isn't correct
31 Correct 5 ms 6100 KB Output is correct
32 Incorrect 5 ms 6100 KB Output isn't correct
33 Correct 14 ms 6340 KB Output is correct
34 Incorrect 14 ms 6332 KB Output isn't correct
35 Incorrect 25 ms 6348 KB Output isn't correct
36 Correct 14 ms 6360 KB Output is correct
37 Incorrect 15 ms 6356 KB Output isn't correct
38 Incorrect 29 ms 6360 KB Output isn't correct
39 Correct 17 ms 6328 KB Output is correct
40 Incorrect 17 ms 6356 KB Output isn't correct
41 Incorrect 40 ms 6432 KB Output isn't correct
42 Correct 25 ms 6460 KB Output is correct
43 Incorrect 23 ms 6404 KB Output isn't correct
44 Incorrect 49 ms 6420 KB Output isn't correct
45 Correct 25 ms 6456 KB Output is correct
46 Incorrect 25 ms 6436 KB Output isn't correct
47 Incorrect 52 ms 6412 KB Output isn't correct
48 Correct 27 ms 6472 KB Output is correct
49 Incorrect 26 ms 6452 KB Output isn't correct
50 Incorrect 66 ms 6544 KB Output isn't correct
51 Correct 32 ms 6604 KB Output is correct
52 Incorrect 35 ms 6508 KB Output isn't correct
53 Incorrect 71 ms 6580 KB Output isn't correct
54 Correct 38 ms 6604 KB Output is correct
55 Incorrect 38 ms 6604 KB Output isn't correct
56 Incorrect 85 ms 6632 KB Output isn't correct
57 Correct 39 ms 6548 KB Output is correct
58 Incorrect 42 ms 6608 KB Output isn't correct
59 Incorrect 112 ms 6668 KB Output isn't correct
60 Correct 46 ms 6596 KB Output is correct
61 Incorrect 48 ms 6612 KB Output isn't correct
62 Incorrect 120 ms 6704 KB Output isn't correct
63 Correct 154 ms 6732 KB Output is correct
64 Correct 217 ms 6704 KB Output is correct
65 Incorrect 206 ms 6620 KB Output isn't correct
66 Correct 199 ms 6716 KB Output is correct
67 Correct 69 ms 6676 KB Output is correct
68 Incorrect 89 ms 6640 KB Output isn't correct
69 Correct 106 ms 6684 KB Output is correct
70 Incorrect 67 ms 6620 KB Output isn't correct
71 Incorrect 77 ms 6692 KB Output isn't correct
72 Correct 73 ms 6724 KB Output is correct
73 Correct 70 ms 6964 KB Output is correct
74 Incorrect 92 ms 6984 KB Output isn't correct
75 Incorrect 102 ms 6972 KB Output isn't correct
76 Incorrect 105 ms 6980 KB Output isn't correct
77 Incorrect 97 ms 6932 KB Output isn't correct
78 Incorrect 117 ms 6988 KB Output isn't correct
79 Incorrect 136 ms 6888 KB Output isn't correct
80 Incorrect 102 ms 6912 KB Output isn't correct
81 Incorrect 106 ms 7056 KB Output isn't correct
82 Incorrect 99 ms 6948 KB Output isn't correct
83 Incorrect 122 ms 6912 KB Output isn't correct
84 Incorrect 135 ms 6812 KB Output isn't correct
85 Incorrect 105 ms 6864 KB Output isn't correct
86 Incorrect 131 ms 6876 KB Output isn't correct
87 Incorrect 128 ms 6808 KB Output isn't correct
88 Incorrect 129 ms 6860 KB Output isn't correct
89 Incorrect 117 ms 6864 KB Output isn't correct
90 Incorrect 133 ms 6736 KB Output isn't correct
91 Incorrect 130 ms 6856 KB Output isn't correct
92 Incorrect 121 ms 6764 KB Output isn't correct