Submission #138619

#TimeUsernameProblemLanguageResultExecution timeMemory
138619BoxworldMecho (IOI09_mecho)C++14
6 / 100
1054 ms65540 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> pii; const int MX=1000,inf=0x7fffffff; int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1}; char G[MX][MX]; int C[MX][MX],best[MX][MX]; int sx,sy,fx,fy,n,s,ans=-1; queue<pii> Q[2]; queue<pair<pii,pii> > Q1; int bfs(){ best[sx][sy]=C[sx][sy]; Q1.push(make_pair(make_pair(sx*MX+sy,0),make_pair(s,C[sx][sy]))); while(!Q1.empty()){ int maxtime=Q1.front().second.second; int xy=Q1.front().first.first; int time=Q1.front().first.second; int time1=Q1.front().second.first; Q1.pop(); if (maxtime<ans)continue; int x=xy/MX,y=xy%MX; if (time1>=s-1){ time1=0; time++; }else time1++; for (int i=0;i<4;i++){ int X=x+dx[i],Y=y+dy[i]; if (X<1||X>n||Y<1||Y>n)continue; if (X==fx&&Y==fy){ if (maxtime>ans)ans=maxtime; // printf("NOW) x:%d y:%d ans=%d\n",X,Y,ans); }else{ // printf("x:%d y:%d time:%d(%d) mxtime:%d nowmax:%d best:%d\n",X,Y,time,time1,maxtime,C[X][Y]-time,best[X][Y]); if (C[X][Y]-time<max(0,ans))continue; if (C[X][Y]-time<best[X][Y])continue; // printf("INQ(%2d) x:%d y:%d time:%d(%d) mxtime:%d nowmax:%d\n",Q1.size(),X,Y,time,time1,maxtime,C[X][Y]-time); best[X][Y]=C[X][Y]-time; Q1.push(make_pair(make_pair(X*MX+Y,time),make_pair(time1,min(maxtime,C[X][Y]-time)))); } } } } int main(){ scanf("%d%d",&n,&s); memset(C,-1,sizeof(C)); memset(best,0,sizeof(best)); for (int i=1;i<=n;i++){ scanf("%s",G[i]+1); for (int j=1;j<=n;j++){ if (G[i][j]=='H'){ C[i][j]=0; Q[0].push(make_pair(i,j)); } if (G[i][j]=='M')sx=i,sy=j; if (G[i][j]=='D')fx=i,fy=j,C[i][j]=inf; } } int cnt=0; for (int t=1;;t++){ if (Q[cnt].empty())break; while(!Q[cnt].empty()){ pii P=Q[cnt].front();Q[cnt].pop(); int x=P.first,y=P.second; for (int i=0;i<4;i++){ int X=x+dx[i],Y=y+dy[i]; if (C[X][Y]>=0||G[X][Y]=='D'||G[X][Y]=='T')continue; C[X][Y]=t; Q[1-cnt].push(make_pair(X,Y)); } } cnt=1-cnt; } bfs(); printf("%d\n",ans); return 0; }

Compilation message (stderr)

mecho.cpp: In function 'int bfs()':
mecho.cpp:42:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
mecho.cpp: In function 'int main()':
mecho.cpp:44:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&s);
  ~~~~~^~~~~~~~~~~~~~
mecho.cpp:48:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%s",G[i]+1);
   ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...