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\n");
80     else if(ans[i]==0)
81     printf("No\n");
82     return 0;
83 }

  重点(坑):

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

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

  2.别清除访问标记

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

  //噎死纪念

  

posted @ 2019-10-01 23:40  RandoMNamE0  阅读(120)  评论(0编辑  收藏  举报