社区讨论
当场死亡
P3958[NOIP 2017 提高组] 奶酪参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mi7dqv4d
- 此快照首次捕获于
- 2025/11/20 20:00 4 个月前
- 此快照最后确认于
- 2025/11/20 20:00 4 个月前
CPP
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<queue>
#include<vector>
#include<cmath>
#define ll long long
using namespace std;
ll T,cnt;
ll fa[1001];
struct TT{
long long x,y,z;
}t[1001];
double dist(ll x1,ll y1,ll z1,ll x2,ll y2,ll z2){
return sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2))+((z1-z2)*(z1-z2)));
}
void so(){
for(int i=1;i<=1000;i++) fa[i]=i;
}
int found(int p){
if(fa[p]==p) return p;
else return fa[p]=found(fa[p]);
}
bool solve(int h,int r,int n){
for(int i=2;i<=n;i++){
double pp=dist(t[i-1].x,t[i-1].y,t[i-1].z,t[i].x,t[i].y,t[i].z);
//cout<<pp<<endl;
if(pp<=2*r)
fa[found(i-1)]=found(i);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(t[i].z+r>=h&&t[j].z-r<=0&&found(i)==found(j))
return 1;
}
return false;
}
int main(){
//freopen("std.txt","r",stdin);
so();
scanf("%lld",&T);
for(int i=1;i<=T;i++){
ll n,h,r;
scanf("%lld%lld%lld",&n,&h,&r);
for(int j=1;j<=n;j++){
ll x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
t[++cnt].x=x;t[cnt].y=y;t[cnt].z=z;
}
if(solve(h,r,n)==1) printf("Yes\n");
else printf("No\n");
cnt=0;
so();
}
return 0;
}
秘制30,然后怎么改也不对了,,,,,,WA
回复
共 3 条回复,欢迎继续交流。
正在加载回复...