Submission #138725

#TimeUsernameProblemLanguageResultExecution timeMemory
138725BoxworldMecho (IOI09_mecho)C++14
19 / 100
1089 ms7004 KiB
#include <bits/stdc++.h>
using namespace std;
const int N=810;
char G[N][N];
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
int T[N][N],d[N][N];
int n,s,sx,sy,fx,fy;
bool vaild(int x,int y){
	if (G[x][y]=='T'||G[x][y]=='H')return 0;
	if (x<1||x>n||y<1||y>n)return 0;
	return 1;
}
bool bfs(int time){
	memset(d,-1,sizeof(d));
	d[sx][sy]=time*s-1;
	queue<int> Q;
	Q.push(sx*N+sy);
	while(!Q.empty()){
		int x=Q.front()/N,y=Q.front()%N;Q.pop();
		if (d[x][y]/s>=T[x][y])continue;
		for (int k=0;k<4;k++){
			int X=x+dx[k],Y=y+dy[k];
			if (d[X][Y]>=0)continue;
			if (!vaild(X,Y))continue;
			if (X==fx&&Y==fy)return 1;
			d[X][Y]=d[x][y]+1;
			Q.push(X*N+Y);
		}
	}
	return 0;
}
int main(){
	scanf("%d%d",&n,&s);
	for (int i=1;i<=n;i++)scanf("%s",G[i]+1);
	memset(T,-1,sizeof(T));
	for (int i=1;i<=n;i++)
	for (int j=1;j<=n;j++){
		if (G[i][j]=='M')sx=i,sy=j;
		if (G[i][j]=='D')fx=i,fy=j,T[i][j]=0x7fffffff;
		if (G[i][j]=='H')T[i][j]=0;
	}
	for (int t=1;;t++){
		int ok=0;
		for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
		if (T[i][j]==t-1){
			for (int k=0;k<4;k++){
				int X=i+dx[k],Y=j+dy[k];
				if (vaild(X,Y)&&T[X][Y]<0){
					T[X][Y]=t;
					ok=1;
				}
			}
		}
		if (!ok)break;
	}
	for (int i=T[sx][sy];i>=0;i--)
	if (bfs(i)){
		printf("%d\n",i);
		return 0;
	}else{
	//	printf("Time:%d\n",i);
	//	for (int x=1;x<=n;x++){
//		for (int j=1;j<=n;j++)printf("%2d",d[x][j]);printf("\n");}
	}
	printf("-1\n");
}

Compilation message (stderr)

mecho.cpp: In function 'int main()':
mecho.cpp:33: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:34:29: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for (int i=1;i<=n;i++)scanf("%s",G[i]+1);
                        ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...