过不了样例!!救救孩子吧T_T
查看原帖
过不了样例!!救救孩子吧T_T
217065
二流公民楼主2021/8/2 09:31

RT

好人一生平安。。。

#include <bits/stdc++.h>
#define ll long long
using namespace std;

ll T, n, h, r, p2[1005], k;
ll fa[1005], p1[1005], tot1, tot2;

struct data {
	ll x, y, z;
}f[1005];

ll check(ll a, ll b) {
	if(((f[b].x - f[a].x) * (f[b].x - f[a].x) + (f[b].y - f[a].y) * (f[b].y - f[a].y) + (f[b].z - f[a].z) * (f[b].z - f[a].z)) > k)
	return 0;
	else return 1;
}

int find(int x) {
	return fa[x] == x ? x : fa[x] = find(fa[x]);
}

int main() {
	scanf("%lld", &T);
	while(T--) {
		memset(p1, 0, sizeof(p1));
		memset(p2, 0, sizeof(p2));
		tot1 = 0; tot2 = 0;
		scanf("%lld%lld%lld", &n, &h, &r);
		k = 4 * r * r;
		for (int i = 1; i <= n; i++)
		fa[i] = i;
		for (int i = 1; i <= n; i++) {
			scanf("%lld%lld%lld", &f[i].x, &f[i].y, &f[i].z);
			if(f[i].z - r <= 0) p2[++tot2] = i;
			if(f[i].x + r >= h) p1[++tot1] = i;
			for (int j = 1; j <= i; j++)
			if(check(i, j)) {
				int dx = find(i);
				int dy = find(j);
				if(dx != dy) fa[dx] = dy;
			}
		}
		int t = 0;
		for (int i = 1; i <= tot1; i++) {
			for (int j = 1; j <= tot2; j++)
			  if(find(p1[i]) == find(p2[j])) {
			  	t = 1; break;
			  }
			if(t == 1) break;
		}
		if(t) cout << "Yes" << endl;
		else cout << "No" << endl;
	}
	return 0;
}
2021/8/2 09:31
加载中...