萌新求助,80分。
查看原帖
萌新求助,80分。
53907
Glaceon_Hibiki楼主2020/6/23 18:25
#include <iostream>
#include <cmath>
using namespace std;
int T,n,h,r;
struct node{long long int x,y,z,pre;}N[20001];
bool touch(node x,node y){return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y)+(x.z-y.z)*(x.z-y.z))<=(double)(2*r);}
int find(int x){
	if(N[x].pre==x) return x;
	return N[x].pre=find(N[x].pre);
}
void merge(int x,int y){
	int fx=find(x),fy=find(y);
	if(fx!=fy) N[fx].pre=fy;
	return;
}
int main(int argc, char** argv) {
	cin>>T;
	while(T--){
		cin>>n>>h>>r;
		int up=0,down=0;
		int Up[20001],Down[20001];
		for(int i=0;i<n;i++){
			cin>>N[i].x>>N[i].y>>N[i].z;
			N[i].pre=i;
			if(N[i].z+r>=h){
				Up[up]=i;
				up++;
			}
			if(N[i].z-r<=0){
				Down[down]=i;
				down++;
			}
			for(int j=0;j<i;j++) if(touch(N[j],N[i])) merge(j,i);
		}
		bool flag=false;
		for(int i=0;i<up;i++){
			for(int j=0;j<down;j++){
				if(N[Up[i]].pre==N[Down[j]].pre){
					flag=true;
					break;	
				}
			}
			if(flag) break;
		}
		if(flag) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}

第六个和第七个点错了QAQ

WA的一声哭了出来。

2020/6/23 18:25
加载中...