Submission #596093

#TimeUsernameProblemLanguageResultExecution timeMemory
596093mosiashvililukaMecho (IOI09_mecho)C++14
100 / 100
242 ms12656 KiB
#include<bits/stdc++.h> using namespace std; const int N=2000009; int a,c,d,e,i,j,ii,jj,zx,xc,S,B[809][809],lef,rig,mid,f[809][809],Mi,Mj,X[809][809],dis[809][809],Di,Dj; bool bo[809][809]; string s; char ch[809][809]; deque <pair <int, int> > de; void chk(int q, int w){ if(q<1||q>a||w<1||w>a) return; if(f[q][w]==0) return; if(B[q][w]>B[i][j]+1){ B[q][w]=B[i][j]+1; de.push_back({q,w}); } } void CHK(int q, int w){ if(q<1||q>a||w<1||w>a) return; if(f[q][w]==0) return; if(bo[q][w]==1) return; if(dis[i][j]+1>X[q][w]) return; bo[q][w]=1; dis[q][w]=dis[i][j]+1; de.push_back({q,w}); } int main(){ ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>a>>S; for(i=1; i<=a; i++){ cin>>s; for(j=1; j<=a; j++){ ch[i][j]=s[j-1]; } } for(i=0; i<=a+1; i++){ for(j=0; j<=a+1; j++){ B[i][j]=N; } } for(i=1; i<=a; i++){ for(j=1; j<=a; j++){ if(ch[i][j]=='H'){ de.push_back({i,j}); B[i][j]=0; } if(ch[i][j]=='T'||ch[i][j]=='D'){ f[i][j]=0; }else{ f[i][j]=1; } if(ch[i][j]=='M'){ Mi=i;Mj=j; } if(ch[i][j]=='D'){ Di=i;Dj=j; } } } while(de.size()){ i=de.front().first;j=de.front().second; de.pop_front(); chk(i+1,j);chk(i-1,j);chk(i,j+1);chk(i,j-1); } /*for(i=1; i<=a; i++){ for(j=1; j<=a; j++){ cout<<B[i][j]<<" "; } cout<<"\n"; }*/ lef=-1;rig=a*a+2; while(1){ if(lef+1>=rig) break; mid=(lef+rig)/2; if(B[Mi][Mj]<=mid){ rig=mid; continue; } for(i=1; i<=a; i++){ for(j=1; j<=a; j++){ if(ch[i][j]=='T'||ch[i][j]=='H'){ f[i][j]=0; }else{ f[i][j]=1; } bo[i][j]=0; if(B[i][j]<=mid){ X[i][j]=-1; }else{ zx=B[i][j]-mid; X[i][j]=zx*S-1; } } } while(de.size()) de.pop_back(); de.push_back({Mi,Mj});bo[Mi][Mj]=1;dis[Mi][Mj]=0; while(de.size()){ i=de.front().first;j=de.front().second; de.pop_front(); CHK(i+1,j);CHK(i-1,j);CHK(i,j+1);CHK(i,j-1); } if(bo[Di][Dj]==1){ lef=mid; }else{ rig=mid; } } cout<<lef; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...