凭啥re?求助大佬
查看原帖
凭啥re?求助大佬
1380473
ZY_202301005129楼主2024/8/28 16:51

一直改来改去老是说我re,我寻思着我数组也没越界啊

#include<bits/stdc++.h>
using namespace std;
#define int long long
struct d
{
	int x, y, z;
};
int fa[1001];
d a[1001];
int n, h, r;
bool judge(d a, d b)
{
	return b.z > a.z;
}
bool touch(int x, int y)
{
	if (sqrt(pow(a[x].x - a[y].x, 2) + pow(a[x].y - a[y].y, 2) + pow(a[x].z - a[y].z, 2)) <= 2 * r)
		return 1;
	else return 0;
}
int refa(int x)
{
	if (fa[x] == x)
		return x;
	else return refa(fa[x]);
}
void ad(int x, int y)
{
	int x1 = refa(x);
	int y1 = refa(y);
	fa[y1] = x1;
}
unsigned main()
{
	int t;cin >> t;
	while (t--)
	{
		int top1=0, low1=0;
		cin >> n >> h >> r;
		int sign = 0;
		for (int i = 1;i <= n;i++)
		{
			cin >> a[i].x >> a[i].y >> a[i].z;
			if (a[i].z + r >= h)top1++;
			if (a[i].z - r <= 0)low1++;
			if (a[i].z + r >= h && a[i].z - r <= 0)
			{
				sign = 1;
				cout << "Yes" << "\n";
				break;
			}
		}
		if (sign)continue;
		for (int i = 1;i <= n;i++)
			fa[i] = i;
		sort(a + 1, a + 1 + n, judge);
		for (int i = 1;i <= n;i++)
		{
			for (int j = 1;j < i;j++)
			{
				if (touch(i, j))
				{
					ad(j, i);
					if (n - i < top1 && refa(i) <= low1)
					{
						cout << "Yes" << "\n";
						sign = 1;
					}
					break;
				}
			}
			if (sign)break;
		}
		if (!sign)cout << "No" << "\n";
	}
}
2024/8/28 16:51
加载中...