前三点AC,后WA求助
查看原帖
前三点AC,后WA求助
605945
luo_xiaoran楼主2023/3/22 13:57
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll t,f[3010];
int find(int x){
	if(f[x]==x)
		return x;
	return f[x]=find(f[x]);
}
struct node{
	ll x,y,z;
}a[3010];
ll dist(ll x1,ll y1,ll z1,ll x2,ll y2,ll z2){
	return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2);
}
bool cmp(node a,node b){
	if(a.x!=b.x)
		if(a.y!=b.y)
			return a.z<b.z;
		else
			return a.y<b.y;
	return a.x<b.x;
}
int main(){
	scanf("%d",&t);
	while(t--){
		ll n,h,r;
		bool o=1;
		scanf("%lld%lld%lld",&n,&h,&r);
		for(int i=1;i<=n;i++){
			scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].z);
			f[i]=i;
		}
		sort(a+1,a+1+n,cmp);
		for(int i=2;i<=n;i++){
			if(dist(a[i-1].x,a[i-1].y,a[i-1].z,a[i].x,a[i].y,a[i].z)<=4*r*r)
				f[find(i)]=find(i-1);
			if(a[i].z+r>=h&&a[f[i]].z-r<=0){
				printf("Yes\n");
				o=0;
				break;
			}
		}
		if(o)
			if(a[1].z+r>=h&&a[1].z-r<=0)
				printf("Yes\n");
			else
				printf("No\n");
	}
	return 0;
}
2023/3/22 13:57
加载中...