蒟蒻求助:过不了样例
查看原帖
蒟蒻求助:过不了样例
393076
TLE_楼主2022/7/27 10:49

看起来没有任何问题的代码,但是样例都过不了

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n[24],h[24],r[24],x[20002],y[20002],z[20002];
int f[20020];
vector<int> out[2];
int find(int k){
    if(f[k] == k)return k;
    return f[k] =find(f[k]);
}
int pp(int x){
	return x * x;
}
signed main(){
	cin >> t;
	for(int k = 0;k < t;k++){
		while(!out[0].empty()){
			out[0].pop_back();
		}
		while(!out[1].empty()){
			out[1].pop_back();
		}
		cin >> n[k] >> h[k] >> r[k];
		for(int j = 0;j < n[k] * t + 5;j++){
			f[j] = j;
		}
		for(int i = 0;i < n[k];i++){
			cin >> x[i] >> y[i] >> z[i];
			if(z[i] - r[k] <= 0){
				out[0].push_back(i);
			}
			else if(z[i] + r[k] >= h[k]){
				out[1].push_back(i);
			}
		}
		for(int i = 0;i < n[k];i++){
			for(int j = 0;j < n[k];j++){
				if(j != i && sqrt(pp(x[i] - x[j]) + pp(y[i] - y[j]) + pp(x[i] - x[j]) <= 2 * r[k])){
					f[find(i)] = find(j);
				}
			}
		}
		bool ye = 1;
		for(int i = 0;i < out[0].size();i++){
			for(int j = 0;j < out[1].size();j++){
				if(find(out[0][i]) == find(out[1][j]) && ye){
					cout << "Yes" << endl;
					ye = 0;
				}
			}
		}
		if(ye){
			cout << "No" << endl;
		}
		for(int i = 0;i < n[k] + 5;i++){
			cout << f[i] << " ";
		}
	}
	
}
2022/7/27 10:49
加载中...