70分求助
  • 板块学术版
  • 楼主llxsmy_forever
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/25 16:59
  • 上次更新2023/10/27 05:57:22
查看原帖
70分求助
664779
llxsmy_forever楼主2022/10/25 16:59
#include<bits/stdc++.h>
#define dou double
using namespace std;
const int N=1100;
struct A{dou x,y,z;}a[N];
bool cmp(A n1,A n2)
{
	if(n1.z==n2.z) return (n1.y==n2.y)?n1.x<n2.x:n1.y<n2.y;
	return n1.z<n2.z;
}
bool check(A n1,A n2,dou r)
{
	dou a=n1.x-n2.x,b=n1.y-n2.y,c=n1.z-n2.z;
	double t=sqrt((a*a)*1.0+(b*b)*1.0+(c*c)*1.0);
	if(t<=2*r) return 1;
	return 0;
}
signed main()
{
	int t;scanf("%d",&t);
	while(t--)
	{
		int n;dou h,r;scanf("%d%lf%lf",&n,&h,&r);
		bool bk=false;
		for(int i=1;i<=n;i++)
		{
			scanf("%lf%lf%lf",&a[i].x,&a[i].y,&a[i].z);
			if(a[i].z-r<=0&&a[i].z+r>=h&&n==1) bk=true;
		}
		sort(a+1,a+1+n,cmp);
		if(bk) puts("Yes");
		else if(n==1) puts("No");
		else if(a[1].z-r>0||a[n].z+r<h) puts("No");
		else
		{
			for(int i=1;i<=n;i++)if(a[i].z-r<=0)
			{
				A now={a[i].x,a[i].y,a[i].z};
				for(int j=i+1;j<=n;j++)
				{
					if(check(now,a[j],r))
					{
						now={a[j].x,a[j].y,a[j].z};
					}
					if(now.z+r>=h)
					{
						bk=true;
						break;
					}
				}
				if(now.z+r>=h)
				{
					bk=true;
					break;
				}
			}
			if(bk) puts("Yes");
			else puts("No");
		}
	}
	return 0;
}

P3958

2022/10/25 16:59
加载中...