果然我还是最菜的==不接受反驳

(先考了day2喵喵喵)

Day2

T1:奶酪

期望得分:100分

实际得分:100分

考察:并查集

思路:这题其实之前做过了==。思路还是比较清晰的,读入时预处理出可以“通天下地”的奶酪,之后n²枚举所有的奶酪关系,可以互达的就连到一个并查集中。互达怎么判断?即使是空间也没关系,将两个奶酪的球心距离与二倍半径比较即可。之前的题解

Code

 1 //15:31
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cmath>
 5 
 6 using namespace std;
 7 typedef long long ll;
 8 
 9 int T,n;
10 int qwq[2000],qaq[2000],cnt,tot;
11 int f[2000];
12 ll h,r;
13 struct point{
14     ll x,y,z;
15 }p[2000];
16 
17 int getf(int x)
18 {
19     if(x==f[x]) return x;
20     else return getf(f[x]);
21 }
22 
23 double dis(int i,int j)
24 {
25     return (double)sqrt((p[i].x-p[j].x)*(p[i].x-p[j].x)+(p[i].y-p[j].y)*(p[i].y-p[j].y)+(p[i].z-p[j].z)*(p[i].z-p[j].z));
26 }
27 
28 int main()
29 {
30     freopen("cheese.in","r",stdin);
31     freopen("cheese.out","w",stdout);
32     scanf("%d",&T);
33     while(T--)
34     {
35         scanf("%d",&n);
36         scanf("%lld%lld",&h,&r);
37         for(int i=1;i<=n;i++)
38         {
39             scanf("%lld%lld%lld",&p[i].x,&p[i].y,&p[i].z);
40             if(p[i].z-r<=0) qwq[++cnt]=i;
41             if(p[i].z+r>=h)    qaq[++tot]=i;
42         }
43         /*for(int i=1;i<=cnt;i++) printf("qwq:%d ",qwq[i]);
44         printf("\n");
45         for(int i=1;i<=tot;i++) printf("qaq:%d ",qaq[i]);
46         printf("\n");*/
47         for(int i=1;i<=n;i++) f[i]=i;
48         for(int i=1;i<=n;i++)
49             for(int j=1;j<=n;j++)
50             {
51                 if(dis(i,j)<=(double)2*r)
52                 {
53                     int pp=getf(i);
54                     int qq=getf(j);
55                     if(qq!=pp)
56                         f[qq]=pp;
57                 }
58             }
59         bool flag=0;
60         for(int i=1;i<=cnt;i++)
61         {
62             for(int j=1;j<=tot;j++)
63             {
64                 int a=qwq[i];int b=qaq[j];
65                 if(getf(a)==getf(b))
66                 {
67                     flag=1;
68                     printf("Yes\n");
69                     break;
70                 }
71             }
72             if(flag) break;
73         }
74         if(!flag) printf("No\n");
75         cnt=0;tot=0;
76     }
77     return 0;
78 }
cheese

相关文章: