Submission #138704

#TimeUsernameProblemLanguageResultExecution timeMemory
138704BoxworldMecho (IOI09_mecho)C++14
14 / 100
1088 ms9720 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 d[MX][MX],d1[MX][MX]; int n,s,sx,sy,fx,fy,ans=-1; queue<int> Q1[2]; int bfs(int time){ memset(d1,0,sizeof(d1)); d1[sx][sy]=-1; queue<int> Q; Q.push(sx*MX+sy); while(!Q.empty()){ int x=Q.front()/MX,y=Q.front()%MX;Q.pop(); // printf("x=%d,y=%d time=%d\n",x,y,d1[x][y]/s+time); if (time>0&&d1[x][y]/s+time>=d[x][y])continue; 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)return 1; if (G[X][Y]=='T'||G[X][Y]=='H'||d1[X][Y]>0)continue; d1[X][Y]=d1[x][y]+1; Q.push(X*MX+Y); // printf("INQ T:%d X:%d Y:%d\n",d1[X][Y],X,Y); } // printf("#\n"); // for (int i=1;i<=n;i++){ // for (int j=1;j<=n;j++)printf("%2d",d1[i][j]);printf("\n"); // } } return 0; } int main(){ scanf("%d%d",&n,&s); memset(d,-1,sizeof(d)); for (int i=1;i<=n;i++){ scanf("%s",G[i]+1); for (int j=1;j<=n;j++){ if (G[i][j]=='H')d[i][j]=0,Q1[0].push(i*MX+j); if (G[i][j]=='M')sx=i,sy=j; if (G[i][j]=='D')d[i][j]=inf,fx=i,fy=j; } } int cnt=0; for (int t=1;;t++){ if (Q1[cnt].empty())break; while(!Q1[cnt].empty()){ int xy=Q1[cnt].front();Q1[cnt].pop(); int x=xy/MX,y=xy%MX; for (int i=0;i<4;i++){ int X=x+dx[i],Y=y+dy[i]; if (d[X][Y]>=0||G[X][Y]=='D'||G[X][Y]=='T')continue; d[X][Y]=t; Q1[1-cnt].push(X*MX+Y); } } cnt=1-cnt; } for (int t=d[sx][sy];t>=0;t--) if (bfs(t)){ printf("%d\n",t); return 0; } printf("-1"); /* if (bfs(-1)){ ans=0; int l=0,m,r=d[sx][sy]; while(l<r){ m=(l+r)/2; if (bfs(m)){ l=m+1; ans=m; }else{ r=m-1; } } } printf("%d\n",ans);*/ return 0; }

Compilation message (stderr)

mecho.cpp: In function 'int main()':
mecho.cpp:36: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:39: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...