zoukankan      html  css  js  c++  java
  • 奶酪(洛谷P3958)

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    double x[1001],y[1001],z[1001];
    bool book[1001];
    int n,h,r;
    bool flag;
    double dist(double x1,double y1,double z1,double x2,double y2,double z2){
        return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));//求空间内两点距离公式
    }
    void dfs(int ball)
    {
        if(flag) return;
        if(z[ball]+r>=h){//找到顶部出口
            printf("Yes
    ");
            flag=1;
            return;
        }
        book[ball]=1;
        for(int i=1;i<=n;i++){
            if(flag) return;//避免重复去走,会TLE
            if(dist(x[ball],y[ball],z[ball],x[i],y[i],z[i])<=r<<1&&!book[i]) dfs(i);//两洞中心距离小于2倍半径,则两洞相通
        }
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        for(int i=1;i<=t;i++){
            scanf("%d%d%d",&n,&h,&r);
            flag=0;
            memset(book,0,sizeof(book));//初始化
            for(int i=1;i<=n;i++){
                scanf("%lf%lf%lf",&x[i],&y[i],&z[i]);
                if(z[i]<=r) book[i]=1;//判断底部入口
            }
            for(int i=1;i<=n;i++){
                if(flag) break;
                else if(book[i]) dfs(i);
            }
            if(!flag) printf("No
    ");//如果没找到出口,则输出No
        }
        return 0;
    }
    

      NOIP2017提高组第二天第一题。其实就是简单的DFS,因为只要判断Yes和No,写好一点就可以了。总用时88ms。

  • 相关阅读:
    HTML基础
    Java基础05-计算机单位
    Java基础04-运算符
    Java基础03-数据类型
    Java基础02-变量
    Java基础01-HelloWorld
    MarkDown基本使用
    短视频学习
    c# as 总结
    在C#中使用Nullable类型和 tuple类
  • 原文地址:https://www.cnblogs.com/dong-ji-yuan/p/9495025.html
Copyright © 2011-2022 走看看