关于样例没过但是数据全过
查看原帖
关于样例没过但是数据全过
890311
xiaoyang111楼主2023/12/30 15:45

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;
}

AC记录

这份代码样例输出

Yes
No
No

但是全过了。

死因是36行的

			for (int k=i+1;k<=n;++k){

是

			for (int k=j+1;k<=n;++k){

所以运气这么好?

2023/12/30 15:45
加载中...