Submission #876660

#TimeUsernameProblemLanguageResultExecution timeMemory
876660MisterReaperMecho (IOI09_mecho)C++17
47 / 100
1090 ms8624 KiB
#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}); } } } for(int ans = 0; ; ans++) { memset(distBear, -1, sizeof(distBear)); q.push({s * ans, 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')) { q.push({d +1, _x, _y}); } } } if(distBear[home.first][home.second] == -1) { cout << ans -1; return; } //cerr << "\n"; } 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; }
#Verdict Execution timeMemoryGrader output
Fetching results...