Submission #1175632

#TimeUsernameProblemLanguageResultExecution timeMemory
1175632prideliqueeeMecho (IOI09_mecho)C++20
38 / 100
148 ms6472 KiB
#include<bits/stdc++.h> using namespace std; #define fff first #define sss second int di[]={1,-1,0,0}; int dj[]={0,0,1,-1}; struct st { int i,j,w; }; struct e { int i,j,sec,step; }; int main() { int n,ss; cin>>n>>ss; string s[n]; int mx,my,dx,dy; int t[n][n]; memset(t,-1,sizeof t); queue<st> q; for(int i=0;i<n;i++) { cin>>s[i]; for(int j=0;j<n;j++) { if(s[i][j]=='M') mx=i,my=j; if(s[i][j]=='D') dx=i,dy=j; if(s[i][j]=='H') { t[i][j]=0; q.push({i,j,0}); } } } while(!q.empty()) { auto p=q.front(); q.pop(); int i=p.i,j=p.j,w=p.w; if(t[i][j]<w) continue; for(int k=0;k<4;k++) { int ii=i+di[k],jj=j+dj[k]; if(ii<0||ii>=n||jj<0||jj>=n) continue; if(t[ii][jj]==-1&&s[ii][jj]=='G'||s[ii][jj]=='M') { t[ii][jj]=w+1; q.push({ii,jj,w+1}); } } } /*for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout<<t[i][j]<<' '; cout<<endl; }*/ int dist[n][n]; int l=-1,r=n*n; while(l<r) { int mid=(l+r+1)/2; memset(dist,-1,sizeof dist); queue<e> qq; qq.push({mx,my,mid,ss}); dist[mx][my]=mid; if(t[mx][my]!=-1&&t[mx][my]<mid) { r=mid-1; continue; } while(!qq.empty()) { auto p=qq.front(); qq.pop(); int i=p.i,j=p.j,sec=p.sec,step=p.step; if(step==ss) { step=1; sec++; } else step++; //cout<<sec<<" "; for(int k=0;k<4;k++) { int ii=i+di[k],jj=j+dj[k]; if(ii<0||ii>=n||jj<0||jj>=n) continue; if(dist[ii][jj]==-1) { if((s[ii][jj]=='G'&&(t[ii][jj]>=sec||t[ii][jj]==-1))||s[ii][jj]=='D') { dist[ii][jj]=sec; qq.push({ii,jj,sec,step}); } } } } //cout<<mid<<' '; if(dist[dx][dy]!=-1) l=mid; else r=mid-1; /*for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout<<dist[i][j]<<' '; cout<<endl; }*/ } cout<<l; }
#Verdict Execution timeMemoryGrader output
Fetching results...