社区讨论
来灌水区发一下:P3598弄坏了3个点
灌水区参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m1up6yud
- 此快照首次捕获于
- 2024/10/04 20:24 去年
- 此快照最后确认于
- 2024/10/04 20:51 去年
#1 #2 #4都WA了
样例能过
感谢支持[抱拳]
CPP#include<bits/stdc++.h>
using namespace std;
struct Bal//结构体:空洞
{
int x,y,z;
bool operator >(Bal a)
{
return z>a.z;
}
bool operator <(Bal a)
{
return z<a.z;
}
bool operator ==(Bal a)
{
return z==a.z;
}
};
bool Tou(int x/*x上的距离*/,int y/*y上的距离*/,int z/*z上的距离*/,int d/*两倍半径*/)
//判断能不能走过去
{
double x1=double(x),y1=double(y),z1=double(z),d1=double(d);
return sqrt(x1*x1+y1*y1+z1*z1)<=d1;
}
int main()
{
int a;
cin>>a;
for(int A=0;A<a;A++)
{
int b,c,d;
cin>>b>>c>>d;
Bal Fil[b];
for(int B=0;B<b;B++)
{
cin>>Fil[B].x>>Fil[B].y>>Fil[B].z;
}
sort(Fil,Fil+b);
int e=0/*接触底的*/,f=b/*接触顶的*/;
while(Fil[e].z<=d)
{
e++;
}
if(e==0)
{
cout<<"No"<<endl;
continue;
}
while(Fil[f-1].z+d>=c)
{
f--;
}
if(f==b)
{
cout<<"No"<<endl;
continue;
}
queue<int> Bfs;
for(int B=0;B<e;B++)
{
Bfs.push(B);
}
bool Vis[b]={false};
for(int B=0;B<e;B++)
{
Vis[B]=true;
}
bool Rea=false;
while(!Bfs.empty())//开始Bfs
{
for(int B=0;B<b;B++)
{
if(Tou(Fil[B].x-Fil[Bfs.front()].x,Fil[B].y-Fil[Bfs.front()].y,Fil[B].z-Fil[Bfs.front()].z,2*d) && !Vis[B])
{
if(B>=f)
{
Rea=true;
break;
}
Bfs.push(B);
Vis[B]=true;
}
}
if(Rea)
{
break;
}
Bfs.pop();
}
if(Rea)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...