Submission #1308207

#TimeUsernameProblemLanguageResultExecution timeMemory
1308207WarinchaiMecho (IOI09_mecho)C++20
100 / 100
374 ms26940 KiB
#include<bits/stdc++.h> #define int long long using namespace std; string s[1005]; int ar[1005][1005]; int vis[1005][1005]; int bear[1005][1005],bee[1005][1005]; int val[1005][1005]; pair<int,int>dir[4]={ {0,1},{1,0},{0,-1},{-1,0} }; int inf=1e9; int n,k; pair<int,int>st,en; int check(int m){ for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)vis[i][j]=0,bear[i][j]=inf; queue<pair<int,int>>q; q.push(st); vis[st.first][st.second]=1; bear[st.first][st.second]=0; int cur=m; //cerr<<"workk\n"; while(!q.empty()){ auto x=q.front(); q.pop(); //cerr<<"go:"<<x.first<<" "<<x.second<<" "<<bear[x.first][x.second]<<"\n"; for(int i=0;i<4;i++){ int xx=x.first+dir[i].first; int yy=x.second+dir[i].second; int tme=bear[x.first][x.second]; if(xx<1||xx>n||yy<1||yy>n||vis[xx][yy]||ar[xx][yy]==0||m+(tme)/k>=bee[x.first][x.second])continue; bear[xx][yy]=bear[x.first][x.second]+1; q.push({xx,yy}); vis[xx][yy]=1; } } return vis[en.first][en.second]; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>k; for(int i=0;i<n;i++)cin>>s[i]; vector<pair<int,int>>v; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ bear[i][j]=bee[i][j]=inf; if(s[i-1][j-1]=='T'); else if(s[i-1][j-1]=='G')ar[i][j]=1; else if(s[i-1][j-1]=='M')st={i,j},ar[i][j]=1; else if(s[i-1][j-1]=='D')en={i,j},ar[i][j]=2; else v.push_back({i,j}); } } queue<pair<int,int>>q; for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)vis[i][j]=0; for(auto x:v){ q.push(x); vis[x.first][x.second]=1; bee[x.first][x.second]=0; } while(!q.empty()){ auto x=q.front(); q.pop(); for(int i=0;i<4;i++){ int xx=x.first+dir[i].first; int yy=x.second+dir[i].second; if(xx<1||xx>n||yy<1||yy>n||vis[xx][yy]||ar[xx][yy]!=1)continue; bee[xx][yy]=bee[x.first][x.second]+1; q.push({xx,yy}); vis[xx][yy]=1; } } //cerr<<"work\n"; int l=0,r=1e9,ans=-1; while(l<=r){ int m=(l+r)/2; //cerr<<"m:"<<m<<"\n"; if(check(m)){ ans=m; l=m+1; }else{ r=m-1; } } cout<<ans; /* for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++)cerr<<bear[i][j]<<"\t"; cerr<<"\n"; } cerr<<"\n"; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++)cerr<<bee[i][j]<<"\t"; cerr<<"\n"; } cerr<<"\n"; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++)cerr<<val[i][j]<<"\t"; cerr<<"\n"; } cerr<<"\n";*/ }
#Verdict Execution timeMemoryGrader output
Fetching results...