比赛 20181002 评测结果 AAAAAAWAAAAAAA
题目名称 流星雨 最终得分 92
用户昵称 pztl 运行时间 0.089 s
代码语言 C++ 内存使用 1.80 MiB
提交时间 2018-10-02 11:53:52
显示代码纯文本
#include<bits/stdc++.h>
#define inf 0x7fffffff
using namespace std;
int n,f[310][310];
bool mark[310][310];
int xx[4]={0,0,1,-1},yy[4]={1,-1,0,0};
struct data
{int x,y,t;}q[90001];
void bfs()
{
	int t=0,w=1;
	mark[0][0]=1;
	while(t<w)
	{
		int x=q[t].x,y=q[t].y,time=q[t].t;
		t++;
		for(int i=0;i<4;i++)
		{
			int x1=x+xx[i],y1=y+yy[i];
			if(mark[x1][y1]||x1<0||y1<0||time+1>=f[x1][y1])
			continue;
            if(f[x1][y1]==inf)
			{
			    cout<<time+1<<endl;;
				return;
			}
			q[w].x=x1;
			q[w].y=y1;
			q[w++].t=time+1;
			mark[x1][y1]=1;
		}
	}
	
}
int main()
{
	freopen("meteor.in","r",stdin);
    freopen("meteor.out","w",stdout);
	for(int i=0;i<=305;i++)
	for(int j=0;j<=305;j++)
	f[i][j]=inf;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int x,y,t;
		cin>>x>>y>>t;
		f[x][y]=min(f[x][y],t);
		for(int j=0;j<4;j++)
		{
			int x1=x+xx[j],y1=y+yy[j];
			if(x1<0||y1<0)
			continue;
			f[x1][y1]=min(f[x1][y1],t);
		}
	}
	bfs();
	return 0; 
}