rt,真实事件。
代码是这个:
#include <iostream>
#include <vector>
#include <tuple>
#include <algorithm>
using namespace std;
long long distance(long long x1,long long y1,long long z1,long long x2,long long y2,long long z2){
return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2);
}
int find(int x,vector<int> &ds){
if (ds[x]!=x){
ds[x]=find(ds[x],ds);
}
return ds[x];
}
int main(){
int t;
cin >> t;
for (int i=0;i<t;++i){
long long n,h,r;
scanf("%lld%lld%lld",&n,&h,&r);
vector<tuple<long long,long long,long long>> p(n+2);
vector<int> ds(n+2);
for (int i=0;i<n+2;++i){
ds[i]=i;
}
for (int j=1;j<=n;++j){
scanf("%lld%lld%lld",&get<0>(p[j]),&get<1>(p[j]),&get<2>(p[j]));
if (-r<=get<2>(p[j]) && get<2>(p[j])<=r){
ds[find(0,ds)]=find(j,ds);
}
if (h-r<=get<2>(p[j]) && get<2>(p[j])<=r+h){
ds[find(n+1,ds)]=find(j,ds);
}
}
for (int j=1;j<=n;++j){
for (int k=i+1;k<=n;++k){
if (distance(get<0>(p[j]),get<1>(p[j]),get<2>(p[j]),
get<0>(p[k]),get<1>(p[k]),get<2>(p[k]))<=4*r*r){
ds[find(j,ds)]=find(k,ds);
}
}
}
if (find(0,ds)==find(n+1,ds)){
cout<<"Yes\n";
}else{
cout<<"No\n";
}
}
return 0;
}
这份代码样例输出
Yes
No
No
但是全过了。
死因是36行的
for (int k=i+1;k<=n;++k){
是
for (int k=j+1;k<=n;++k){
所以运气这么好?