社区讨论

当场死亡

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 条回复,欢迎继续交流。

正在加载回复...