RE 14分 求助
查看原帖
RE 14分 求助
215713
方俊懿楼主2020/10/16 22:18
#include <cstdio>
#define Hello input();
#define World printf("%d",solve())
void input();
int solve();
int main()
{
	Hello World;
	return 0;
}
int n,t[50005],x[50005],y[50005];
int timeQ[3600000],xQ[3600000],yQ[3600000],head,tail=1;
bool book[605][605];
int d[2][4]={{0,0,-1,1},{-1,1,0,0}};
void input()
{
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d%d%d",&x[i],&y[i],&t[i]);
}
bool check(int xx,int yy,int time)
{
	bool map[605][605]={};
	for(int i=0;i<n;i++)
		if(t[i]<=time)
		{
			map[x[i]][y[i]]=1;
			map[x[i]+1][y[i]]=1;
			map[x[i]-1][y[i]]=1;
			map[x[i]][y[i]+1]=1;
			map[x[i]][y[i]-1]=1;
		}
	return !map[xx][yy];
}
int solve()
{
	while(head<tail)
	{
		for(int i=0;i<4;i++)
		{
			int nx=xQ[head]+d[0][i],ny=yQ[head]+d[1][i];
			if(nx>=0 && nx<600 && ny>=0 && ny<600 && !book[nx][ny] && check(nx,ny,timeQ[head]+1))
			{
				if(check(nx,ny,1002))
					return timeQ[head]+1;
				xQ[tail]=nx;
				yQ[tail]=ny;
				timeQ[tail]=timeQ[head]+1;
				book[nx][ny]=1;
				tail++;
			}
		}
		head++;
	}
	return -1;
}
2020/10/16 22:18
加载中...