Submission #960603

#TimeUsernameProblemLanguageResultExecution timeMemory
960603htphong0909Mecho (IOI09_mecho)C++17
100 / 100
137 ms15368 KiB
#include<bits/stdc++.h> using namespace std; #define fi first #define se second using ll = long long; using ii = pair<int, int>; const int N = 1e6+5; const int INF = 1e9; ll d[1000][1000],m[1000][1000],n,s; char a[1000][1000]; ll dx[4]={1,0,0,-1}; ll dy[4]={0,1,-1,0}; ii pos,h; bool bfs(ll x) { if (d[pos.fi][pos.se] - x * s <= 0) return 0; queue<ii> q; q.push(pos); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { m[i][j]=0; } } while(!q.empty()) { ii u=q.front(); q.pop(); for(int i=0;i<4;i++) { ii v={u.fi+dx[i],u.se+dy[i]}; if(v.fi<0 || v.fi>=n || v.se<0 || v.se>=n) continue; if(m[v.fi][v.se]==0 && a[v.fi][v.se]!='T' && d[v.fi][v.se]-x*s>m[u.fi][u.se]+1 && a[v.fi][v.se]!='M') { m[v.fi][v.se]=m[u.fi][u.se]+1; q.push(v); } } } if(m[h.fi][h.se]>0) return 1; else return 0; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); queue<ii> q; cin >> n >> s; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cin >> a[i][j]; if(a[i][j]=='H') { q.push({i,j}); } if(a[i][j]=='M') pos={i,j}; if(a[i][j]=='D') h={i,j}; } } while(!q.empty()) { ii u=q.front(); q.pop(); for(int i=0;i<4;i++) { ii v={u.fi+dx[i],u.se+dy[i]}; if(v.fi<0 || v.fi>=n || v.se<0 || v.se>=n) continue; if(d[v.fi][v.se]==0 && a[v.fi][v.se]!='T' && a[v.fi][v.se]!='H' && a[v.fi][v.se]!='D') { d[v.fi][v.se]=d[u.fi][u.se]+s; q.push(v); } } } d[h.fi][h.se] = INF; ll l=0,r=99999999,ans=-1; while(l<=r) { ll m=(l+r)/2; if(bfs(m)) { ans=m; l=m+1; } else { r=m-1; } } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...