zoukankan      html  css  js  c++  java
  • 2019/9/27 题解:【P3958】 奶酪

        题解:【P3958】  奶酪

      题目:

          传送门:https://www.luogu.org/problem/P3958

      AC代码:DFS

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<cstdio>
     5 #include<cmath>
     6 using namespace std;
     7 int n,outfg,cnt,anst;
     8 double h,r;
     9 int ans[1005];        
    10 struct node
    11 {
    12     double x;
    13     double y;
    14     double z;
    15     int vis;
    16 }p[1005];
    17 bool cmp(node a,node b)
    18 {
    19     return a.z<b.z;
    20 }
    21 double dis(node a,node b)
    22 {
    23     double x1=a.x, x2=b.x, y1=a.y, y2=b.y, z1=a.z, z2=b.z;
    24     return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1));
    25 }
    26 void dfs(int x)
    27 {
    28     if(p[x].z+r>=h)//边界 
    29     {
    30         outfg=1;
    31         return;
    32     }
    33     p[x].vis=1;
    34     for(int i=1;i<=n;i++)
    35     {
    36         double d=dis(p[x],p[i]);
    37         if(d==0)
    38         continue;
    39         if(outfg==1)
    40         return ;
    41         if(p[i].vis==0)
    42         {
    43             if(d<=r*2)
    44             {
    45                 dfs(i);
    46             }        
    47         }
    48     }
    49 }
    50 int main()
    51 {
    52     int t;
    53     scanf("%d",&t);
    54     anst=t;
    55     while(t--)
    56     {
    57         outfg=0;
    58         scanf("%d %lf %lf ",&n,&h,&r);
    59         for(int i=1;i<=n;i++)
    60         p[i].vis=0;
    61         for(int i=1;i<=n;i++)
    62         {
    63             scanf("%lf %lf %lf",&p[i].x,&p[i].y,&p[i].z);
    64         }
    65         sort(p+1,p+n+1,cmp);
    66         for(int i=1;i<=n;i++)
    67         {
    68             if(outfg==1)
    69             break;
    70             if(p[i].z<=r)
    71             dfs(i);
    72         }
    73         if(outfg==1)
    74         ans[anst-t]=1;
    75         else ans[anst-t]=0;
    76     }
    77     for(int i=1;i<=anst;i++)
    78     if(ans[i]==1)
    79     printf("Yes
    ");
    80     else if(ans[i]==0)
    81     printf("No
    ");
    82     return 0;
    83 }

      重点(坑):

      1.别闲的没事干往函数里面传结构体

         个人理解传结构体原理是先将结构体复制一遍再进行操作,原结构体数据不改变(debug : 2.5h)

      2.别清除访问标记

         亲测导致部分数据无限循环//50%AC,50%TLE(debug:0.5h)

      //噎死纪念

      

  • 相关阅读:
    Linux NFS服务器的安装与配置
    Genymotion加速下载虚拟镜像速度慢失败Connection timeout
    人脸识别的损失函数
    caffe服务器搭建血泪记录
    shell
    ZigZag Conversion
    SSH阅读笔记
    numpy数组扩展函数repeat和tile用法
    高效网络小结
    Bag of Tricks for Image Classification with Convolutional Neural Networks论文笔记
  • 原文地址:https://www.cnblogs.com/randomaddress/p/11616491.html
Copyright © 2011-2022 走看看