样例点过不去,求助qwq
  • 板块学术版
  • 楼主Masna_Kimoyo
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/9/29 18:23
  • 上次更新2023/11/5 12:25:57
查看原帖
样例点过不去,求助qwq
199459
Masna_Kimoyo楼主2020/9/29 18:23
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int T,n,h,r,k;  
int x[N],y[N],z[N],head[N];
bool flag[N];
inline int read()
{
    int w=0,x=0;
    char c=getchar();
    while(!isdigit(c))
        w|c=='-',c=getchar();
    while(isdigit(c))
        x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return w?-x:x;
}
inline int dis(int x,int y,int z,int xx,int yy,int zz)
{
    return sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy)+(z-zz)*(z-zz));
}
inline bool dfs(int X,int Y,int Z,int K)
{
    if(r>h-Z)   return 1;
    flag[K];
    for(register int i=1;i<=n;++i)
    {
        if(flag[i]) continue;
        if(2*r>dis(x[i],y[i],z[i],X,Y,Z))
        {
            flag[i]=1;
            dfs(x[i],y[i],z[i],i);
        }
    }
    return 0;
}
inline void work()
{
    n=read(),h=read(),r=read();
    for(register int i=1;i<=n;++i)
    {
        x[i]=read(),y[i]=read(),z[i]=read();
        if(r>=z[i]) head[++k]=i;
    }
    for(register int i=1;i<=k;++i)
    {
        memset(flag,0,sizeof(flag));
        if(dfs(x[head[i]],y[head[i]],z[head[i]],head[i]))
        {
            printf("Yes\n");
            return ;
        }       
    }
    printf("No\n");
}
int main()
{
    T=read();
    for(register int G=1;G<=T;++G)
        work();
    return 0;
}
2020/9/29 18:23
加载中...