为什么wa了4个点

P3958 [NOIP2017 提高组] 奶酪

```cpp #include<iostream> #include<cmath> #include<cstring> using namespace std; int f[1010]; struct Dian{ double x,y,z; }dian[10010]; double dis[1010][1010]; double js(int a,int b) { double t1=abs(dian[a].x-dian[b].x); double t2=abs(dian[a].y-dian[b].y); double t3=abs(dian[a].z-dian[b].z); int tt=t1*t1+t2*t2+t3*t3; return sqrt(tt); } void csh() { for(int i=1;i<=10010;i++) dian[i].x=dian[i].y=dian[i].z=0; } int find(int k) { if(f[k]==k) return k; return f[k]=find(f[k]); } int pd(int a,int b) { int t1=find(a),t2=find(b); if(t1==t2) return 1; else return 0; } void hb(int a,int b) { int t1=find(a),t2=find(b); f[t1]=t2; } int main() { int t; cin>>t; for(int k=1;k<=t;k++) { int n,h,r; csh(); cin>>n>>h>>r; for(int i=1;i<=n;i++)f[i]=i; for(int i=1;i<=n;i++) cin>>dian[i].x>>dian[i].y>>dian[i].z; for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) { double t=js(i,j); if(t<=2*r) hb(i,j); } bool b[1010];memset(b,0,sizeof(b)); int c[1010];memset(c,0,sizeof(c)); int cnt=0; for(int i=1;i<=n;i++) { if(!b[find(i)]) { c[++cnt]=find(i); b[find(i)]=1; } } int flag=0; for(int i=1;i<=cnt;i++) { double minn=0x7fffffff,maxx=-156; for(int j=1;j<=n;j++) { int t1=find(j); if(t1==c[i]) { minn=min(minn,dian[j].z); maxx=max(minn,dian[j].z); } if((maxx+r)>=h&&(minn-r)<=0) flag=1; } } if(flag==1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; } ```
by aa58760 @ 2018-06-14 22:01:51


边界没处理好吧,再想想
by 少帅_zjm @ 2018-06-14 23:01:09


记得特判n=1的情况 @[aa58760](/space/show?uid=48791)
by bztMinamoto @ 2018-06-15 19:03:43


|