我人傻了,10分,下载数据点居然判定没有输入完,淦!
查看原帖
我人傻了,10分,下载数据点居然判定没有输入完,淦!
293127
doitagain楼主2020/8/28 12:08
#include <iostream>
#include <vector>
#include <queue>
#include <math.h>
#include <cstring>
#include <cstdio>
using namespace std;
int T,n,h,r;
struct point
{
	int x,y,z,num;
}f[1005];
queue<point> q;
bool v[1005],flag;
double dis (int x1,int y1,int z1,int x2,int y2,int z2)
{
	 double a=(x1-x2)*(x1-x2);
	 double b=(y1-y2)*(y1-y2);
	 double c=(z1-z2)*(z1-z2);
	return sqrt (a+b+c);
}
int main()
{  //freopen ("P3985.txt","r",stdin);
   //freopen ("P3985.txt","w",stdout);
	cin>>T;
	for (int i=1;i<=T;i++)
	{  int start;
	flag=0;
	  memset (v,0,sizeof(v));
		cin>>n>>h>>r;
		for (int k=1;k<=n;k++)
		{
			int x,y,z;
			cin>>x>>y>>z;
			f[k].x=x; f[k].y=y; f[k].z=z; f[k].num=k;
			
		}
		for (int j=1;j<=n;j++)
		{
			if (f[i].z<=r)
			{
				start=i;
				break;
			}
		}
		v[start]=1;
	q.push(f[start]);
	while (!q.empty())
	{ point u=q.front(); 
	 if (u.z+r>=h)
	 {
	 	flag=1;
	 	cout<<"Yes"<<endl;
	 	break;
	 }
	  q.pop();
	   for (int i=1;i<=n;i++)
	   {  double g=dis(u.x,u.y,u.z,f[i].x,f[i].y,f[i].z);
	   	if (u.num!=i && g<=2*r && !v[i])
	   	{
	   		v[i]=1;
	   		q.push(f[i]);
		}
	   }
		
	}
	if (!flag) cout<<"No"<<endl;
		}
	//	fclose (stdin); fclose (stdout);
		return 0;
}

2020/8/28 12:08
加载中...