社区讨论
求助犇犇(dfs80)
P3958[NOIP 2017 提高组] 奶酪参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mi7rg630
- 此快照首次捕获于
- 2025/11/21 02:24 4 个月前
- 此快照最后确认于
- 2025/11/21 02:24 4 个月前
CPP
#include <bits/stdc++.h>
#define read read()
#define F(i,l,r,op) for(int i = (l); i <= (r);(op))
using namespace std;
const int N = 1005;
int T;
int n,h,r;
int vis[N],z[N],x[N],y[N];
int maps[N][N],st[N];
bool flag;
int read
{
int x = 0,f = 1; char ch = getchar();
while(ch < 48 || ch > 57) {if(ch == '-') f = -1; ch = getchar();}
while(ch >= 48&& ch <= 57) { x = 10 * x + ch - 48; ch = getchar();}
return x * f;
}
bool judge(int i,int j)
{
return (long long)((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]) + (z[i] - z[j]) * (z[i] - z[j])) <= (long long)(4 * r * r);
}
void dfs(int cur)
{
if(flag) return;
if(z[cur] + r >= h)
{
flag = 1; return ;
}
F(v,1,n,v++)
{
if(!vis[v] && judge(cur,v))
{
vis[v] = 1;
dfs(v);
}
}
}
int main()
{
T = read;
while(T--)
{
int cnt = 0; flag = 0;
n = read; h = read; r = read;
memset(vis,0,sizeof(vis));
F(i, 1, n, i++)
{
x[i] = read; y[i] = read; z[i] = read;
if(z[i] <= r && z[i] >= -r) st[++cnt] = i;
}
F(i,1,cnt,i++)
{
dfs(st[i]);
if(flag) break;
}
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...