Submission #876669

#TimeUsernameProblemLanguageResultExecution timeMemory
876669MisterReaperMecho (IOI09_mecho)C++17
84 / 100
125 ms7780 KiB
#pragma optimize("unroll-loops,O3") #include <bits/stdc++.h> using namespace std; using i64 = long long; const int MAXN = 800 + 5; char matrix[MAXN][MAXN]; int distBee[MAXN][MAXN]; int distBear[MAXN][MAXN]; int dx[4] = {0, 1, 0, -1}; int dy[4] = {1, 0, -1, 0}; #define ONLINE_JUDGE void solve() { memset(distBee, -1, sizeof(distBee)); int n, s; cin >> n >> s; pair <int, int> initial; pair <int, int> home; queue <array <int, 3>> q; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { cin >> matrix[i][j]; if(matrix[i][j] == 'H') { q.push({0, i, j}); } else if(matrix[i][j] == 'M') { initial = {i, j}; } else if(matrix[i][j] == 'D') { home = {i, j}; } } } auto in = [&](int x, int y) -> bool { return 1 <= min(x, y) && max(x, y) <= n; }; while(!q.empty()) { auto [d, x, y] = q.front(); q.pop(); if(distBee[x][y] != -1) { continue; } distBee[x][y] = d; for(int dir = 0; dir < 4; dir++) { int _x = x + dx[dir], _y = y + dy[dir]; if(in(_x, _y) && matrix[_x][_y] == 'G') { q.push({d +1, _x, _y}); } } } auto check = [&](int k) -> bool { memset(distBear, -1, sizeof(distBear)); q.push({s * k, initial.first, initial.second}); while(!q.empty()) { auto [d, x, y] = q.front(); q.pop(); if(distBear[x][y] != -1 || (distBee[x][y] != -1 && d / s >= distBee[x][y])) { continue; } //cerr << d << " :: " << x << " " << y << " | " << distBee[x][y] << "\n"; distBear[x][y] = d; for(int dir = 0; dir < 4; dir++) { int _x = x + dx[dir], _y = y + dy[dir]; if(in(_x, _y) && (matrix[_x][_y] == 'G' || matrix[_x][_y] == 'D') && distBear[_x][_y] == -1) { q.push({d +1, _x, _y}); } } } if(distBear[home.first][home.second] == -1) { return false; } return true; }; int l = 0, r = n * n + 2, ans = 0; while(l <= r) { int mid = (l + r) / 2; if(check(mid -1)) { ans = mid; l = mid +1; } else { r = mid -1; } } cout << ans -1; return; } signed main() { #ifndef ONLINE_JUDGE freopen(".in", "r", stdin); freopen(".out", "w", stdout); #endif ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int t = 1; //cin >> t; for(int i = 1; i <= t; i++) { solve(); } return 0; }

Compilation message (stderr)

mecho.cpp:1: warning: ignoring '#pragma optimize ' [-Wunknown-pragmas]
    1 | #pragma optimize("unroll-loops,O3")
      |
#Verdict Execution timeMemoryGrader output
Fetching results...