震惊!xcc一道普及难度题 WA 3次的原因竟然是…

  • A+
所属分类:代码笔记 信息技术

震惊!xcc一道普及难度提高组原题 WA 3次的原因竟然是找到答案后的break语句没写好...

题目:P3958 奶酪

具体见line 80

  1. #include<cstdio>
  2. #define re register
  3. #define in inline
  4. #define int long long
  5. inline int read()
  6. {
  7.     int s=0,b=1;
  8.     char ch;
  9.     do{
  10.         ch=getchar();
  11.         if(ch=='-') b=-1;
  12.     }while(ch<'0' || ch>'9');
  13.     while(ch>='0' && ch<='9')
  14.     {
  15.         s=s*10+ch-'0';
  16.         ch=getchar();
  17.     }
  18.     return b*s;
  19. }//快读是不可能出锅的
  20. in int dis(int x1,int y1,int z1,int x2,int y2,int z2)
  21. {
  22.     return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2);
  23. }
  24. int T,n,h,r;
  25. int f[1100];
  26. struct node{
  27.     int x,y,z;
  28. }a[1100];
  29. int up[1100],down[1100],cntu,cntd;
  30. int find(int x)
  31. {
  32.     if(x!=f[x]) f[x]=find(f[x]);
  33.     return f[x];
  34. }
  35. in void u(int r1,int r2)
  36. {
  37.     f[r1]=r2;
  38. }
  39. signed main()
  40. {
  41.     T=read();
  42.     for(re int _=1;_<=T;++_)
  43.     {
  44.         n=read();
  45.         h=read();
  46.         r=read();
  47.         for(re int i=1;i<=n;++i) f[i]=i;
  48.         cntu=0,cntd=0;
  49.         for(re int i=1;i<=n;++i)
  50.         {
  51.             a[i].x=read();
  52.             a[i].y=read();
  53.             a[i].z=read();
  54.             for(int j=1;j<=i;++j)//注意自己和自己是联通的
  55.             {
  56.                 int t=dis(a[i].x,a[i].y,a[i].z,a[j].x,a[j].y,a[j].z);
  57.                 if(t<=4*r*r){
  58.                     int r1=find(i);
  59.                     int r2=find(j);
  60.                     if(r1!=r2) u(r1,r2);
  61.                 }
  62.             }
  63.             if(a[i].z<=r) down[++cntd]=i;
  64.             if(a[i].z>=h-r) up[++cntu]=i;
  65.         }
  66.         int flag=1;
  67.         for(re int i=1;i<=cntd;++i)
  68.         {
  69.             for(re int j=1;j<=cntu;++j)
  70.             {
  71.                 //if(down[i]==up[j]) continue;
  72.                 //注意自己和自己是联通的, 加上面那句会全WA
  73.                 int r1=find(down[i]),r2=find(up[j]);
  74.                 if(r1==r2){
  75.                     printf("Yes\n");
  76.                     flag=0;
  77.                     break;
  78.                 }
  79.             }
  80.             if(!flag) break;//原先没有这句,如果有多种可行解会输出多个Yes
  81.         }
  82.         if(flag) printf("No\n");
  83.     }
  84.     return 0;
  85. }

今天遇到好几次这样的问题

一次是忘开long long

一次是数组忘记开大

都是为了省空间而 RE

一次是忘删DeBug语句

希望考场上别忘打freopen()

xcc

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: