CE求助
  • 板块学术版
  • 楼主Nelson_Wang
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/9/18 20:13
  • 上次更新2023/11/4 06:26:31
查看原帖
CE求助
143742
Nelson_Wang楼主2021/9/18 20:13

不知道哪里ce了

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e4+5;
struct H{
	int x, y, t;
	bool operator<(const H &T)const{
		return t<T.t;
	}
}s[MAXN];

int n, f[302][302], a[302][302];
queue<H> que;

int main(){
	// freopen("input.txt", "r", stdin);
	scanf("%d", &n);
	for(int i=1; i<=n; ++i){
		scanf("%d%d%d", &s[i].x, &s[i].y, &s[i].t);
		f[s[i].x][s[i].y] = 1;
		if(s[i].x>0)
			f[s[i].x-1][s[i].y] = 1;
		if(s[i].x<300)
			f[s[i].x+1][s[i].y] = 1;
		if(s[i].y>0)
			f[s[i].x][s[i].y-1] = 1;
		if(s[i].y<300)
			f[s[i].x][s[i].y+1] = 1;
	}
	sort(s+1, s+n+1);
	que.push((H){0, 0, 0});
	int q = 1;
	for(int i=1; i<=301*301; ++i){
		while(s[q].t<=i && q<=n){
			a[s[q].x][s[q].y] = 1;
			if(s[q].x>0)
				a[s[q].x-1][s[q].y] = 1;
			if(s[q].x<300)
				a[s[q].x+1][s[q].y] = 1;
			if(s[q].y>0)
				a[s[q].x][s[q].y-1] = 1;
			if(s[q].y<300)
				a[s[q].x][s[q].y+1] = 1;
			++q;
		}
		while(!que.empty() && que.front().t<i){
			H k = que.front();
			if(!f[k.x][k.y])
				return printf("%d", k.t), 0;
			que.pop();
			if(k.x>1 && !a[k.x-1][k.y])
				que.push((H){k.x-1, k.y, k.t+1});
			if(k.x<300 && !a[k.x+1][k.y])
				que.push((H){k.x+1, k.y, k.t+1});
			if(k.y>1 && !a[k.x][k.y-1])
				que.push((H){k.x, k.y-1, k.t+1});
			if(k.y<300 && !a[k.x][k.y+1])
				que.push((H){k.x, k.y+1, k.t+1});
			a[k.x][k.y] = 1;
		}
	}
	puts("-1");
	return 0;
}
2021/9/18 20:13
加载中...