Submission #958014

#TimeUsernameProblemLanguageResultExecution timeMemory
958014theehannMecho (IOI09_mecho)C++17
3 / 100
156 ms31824 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define int ll #define ft first #define se second #define NAME "A" #define file freopen(NAME".INP","r",stdin); freopen(NAME".OUT","w",stdout); #define sdf ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); const int MOD = 1e9 + 7; const int N = 800 + 5, INF = 1e15; int dx[4] = {0, 0, -1, 1}; int dy[4] = {-1, 1, 0, 0}; char a[N][N]; int dis[N][N]; bool f = false, vis[N][N] = {false}; int n, step, homex, homey, mx, my; bool dfs(int len, int x, int y){ vis[x][y] = true; int dist = (len + 1) / step; for(int i = 0;i < 4;++i){ int u = dx[i] + x; int v = dy[i] + y; if(u == homex && v == homey){ return true; } if(u < 1 || v < 1 || u > n || v > n) continue; if((a[u][v] == 'G') && !vis[u][v] && ((len + 1 % step == 0) ? (dist < dis[u][v]) : (dist <= dis[u][v]))){ if(dfs(len + 1, u, v)){ return true; } } } return false; } int32_t main(){ sdf cin >> n >> step; queue<pair<int, int>> q; for(int i = 1;i <= n;++i){ for(int j = 1;j <= n;++j){ cin >> a[i][j]; dis[i][j] = INF; if(a[i][j] == 'H'){ q.push({i, j}); dis[i][j] = 0; } else if(a[i][j] == 'D'){ homex = i; homey = j; } else if(a[i][j] == 'M'){ mx = i; my = j; } } } while(!q.empty()){ const auto [x, y] = q.front(); q.pop(); for(int i = 0;i < 4;++i){ int u = x + dx[i]; int v = y + dy[i]; if(u < 1 || v < 1 || u > n || v > n) continue; if(dis[u][v] == INF && a[u][v] == 'G'){ dis[u][v] = dis[x][y] + 1; q.push({u, v}); } } } int l = 1, r = INF; int ans =0; while(l <= r){ int mid = (l + r) / 2; memset(vis, false, sizeof(vis)); if(dfs(mid * step, mx, my)){ l = mid + 1; ans = mid; } else{ r = mid - 1; } } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...