Solution: cheese [P3958]
topic:
Portal: https://www.luogu.org/problem/P3958
AC Code: 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 }
Focus (pit):
1. Do nothing to do idle function to pass inside the structure
Personal understanding is the first principle of transfer structure struct copy it again before proceeding, without changing the original data structure (debug: 2.5h)
2. Do not remove access tag
Pro-test result in the data portion of an endless loop //50%AC,50%TLE(debug:0.5h)
// choke Memorial