求调!
查看原帖
求调!
1067504
godogod楼主2024/10/4 15:48
#include<bits/stdc++.h>
using namespace std;
int m; 
int nx[50002],ny[50002],t[50002];
bool map_[400][400];

int time_=0,last_time=0;
struct node
{
	int x,y; 
}que[1000005];
bool rockfall(int x,int y)
{
	for(int i=1;i<=m;i++)
	{
		if(t[i]==time_+1)
		{
			map_[nx[i]][ny[i]]=false;
			map_[nx[i]+1][ny[i]]=false;
			map_[nx[i]-1][ny[i]]=false;
			map_[nx[i]][ny[i]+1]=false;
			map_[nx[i]][ny[i]-1]=false;
		}
	}
	if(map_[x][y]==true)return true;
	else return false;
}
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
int head,tail;
bool bfs(int nx,int ny)
{
	head=0;tail=1;
	que[1].x=nx;
	que[1].y=ny;
	while(head<=tail)
	{
		head++;
		for(int i=0;i<4;i++)
		{
			int xx=que[head].x+dx[i];
			int yy=que[head].y+dy[i];
			if(map_[xx][yy]==true && xx>=0 && yy>=0 && rockfall(xx,yy) )
			{
				time_++;
				tail++;
				que[tail].x=xx;
				que[tail].y=yy;
				map_[xx][yy]=false;
//				cout<<xx<<" "<<yy<<endl;
				if(time_>=last_time)
				{
					return true;
				}
			}
		}
	}
	return false;
}
int main()
{
	cin>>m;
	memset(map_,true,sizeof(map_));
	for(int i=1;i<=m;i++) 
	{
		cin>>nx[i]>>ny[i]>>t[i];
		last_time=t[i]; 
	}
//	cout<<last_time<<endl;
	if(bfs(0,0))
	{
		cout<<time_;
		return 0;
	}
	else cout<<-1;
	return 0;
}
2024/10/4 15:48
加载中...