Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
AC附代码Source Code Problem: 2177 User: JiaJunpeng Memory: 192K Time: 94MS Language: C++ Result: Accepted Source Code #include<iostream> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #include<stdio.h> using namespace std; double A,B,C,ru,val1,val2,delta,k1,b1,k2,b2; struct sphere { double x,y,z,r; }; sphere a[111]; int n,ans,num,an[111],cnt[111]; int main() { int i,j,s,p,q; double x1,y1,z1; while(scanf("%d",&n)==1) { for(i=0;i<n;i++) scanf("%lf%lf%lf%lf",&a[i].x,&a[i].y,&a[i].z,&a[i].r); ans=0; for(i=0;i<n;i++) { x1=a[i].x; y1=a[i].y; z1=a[i].z; num=0; memset(cnt,0,sizeof(cnt)); for(j=0;j<n;j++) { A=x1*x1+y1*y1+z1*z1; B=-2*(x1*a[j].x+y1*a[j].y+z1*a[j].z); C=a[j].x*a[j].x+a[j].y*a[j].y+a[j].z*a[j].z-a[j].r*a[j].r; if(B*B-4*A*C>=0) cnt[num++]=j; } if(num>ans) { ans=num; for(j=0;j<ans;j++) an[j]=cnt[j]; } for(j=i+1;j<n;j++) { val1=a[i].x*a[i].x+a[i].y*a[i].y+a[i].z*a[i].z-a[i].r*a[i].r; val2=a[j].x*a[j].x+a[j].y*a[j].y+a[j].z*a[j].z-a[j].r*a[j].r; ru=sqrt(val2/val1); if(a[j].x*a[i].y==a[i].x*a[j].y&&a[j].x*a[i].z==a[i].x*a[j].z) continue; if(a[j].x*a[i].y==a[i].x*a[j].y) { z1=(ru*a[j].x*val1-a[i].x*val2)/(ru*(a[j].x*a[i].z-a[i].x*a[j].z)); A=1+a[i].x*a[i].x/(a[i].y*a[i].y); B=-2*a[i].x*(val1-z1*a[i].z)/(a[i].y*a[i].y); C=(val1-z1*a[i].z)*(val1-z1*a[i].z)/(a[i].y*a[i].y)-val1+z1*z1; delta=B*B-4*A*C; if(delta<0) continue; x1=(-B+sqrt(delta))/(2*A); y1=(val1-z1*a[i].z-x1*a[i].x)/a[i].y; num=2; cnt[0]=i; cnt[1]=j; for(int jj=0;jj<n;jj++) { if(jj==i||jj==j) continue; A=x1*x1+y1*y1+z1*z1; B=-2*(x1*a[jj].x+y1*a[jj].y+z1*a[jj].z); C=a[jj].x*a[jj].x+a[jj].y*a[jj].y+a[jj].z*a[jj].z-a[jj].r*a[jj].r; if(B*B-4*A*C>=0) cnt[num++]=jj; } if(ans<num) { ans=num; for(int jj=0;jj<ans;jj++) an[jj]=cnt[jj]; } A=1+a[i].x*a[i].x/(a[i].y*a[i].y); B=-2*a[i].x*(val1-z1*a[i].z)/(a[i].y*a[i].y); C=(val1-z1*a[i].z)*(val1-z1*a[i].z)/(a[i].y*a[i].y)-val1+z1*z1; delta=B*B-4*A*C; x1=(-B-sqrt(delta))/(2*A); y1=(val1-z1*a[i].z-x1*a[i].x)/a[i].y; num=2; cnt[0]=i; cnt[1]=j; for(int jj=0;jj<n;jj++) { if(jj==i||jj==j) continue; A=x1*x1+y1*y1+z1*z1; B=-2*(x1*a[jj].x+y1*a[jj].y+z1*a[jj].z); C=a[jj].x*a[jj].x+a[jj].y*a[jj].y+a[jj].z*a[jj].z-a[jj].r*a[jj].r; if(B*B-4*A*C>=0) cnt[num++]=jj; } if(ans<num) { ans=num; for(int jj=0;jj<ans;jj++) an[jj]=cnt[jj]; } } else { k1=-(a[j].x*a[i].z-a[i].x*a[j].z)/(a[j].x*a[i].y-a[i].x*a[j].y); b1=(ru*a[j].x*val1-a[i].x*val2)/(ru*(a[j].x*a[i].y-a[i].x*a[j].y)); k2=-(k1*a[i].y+a[i].z)/a[i].x; b2=(val1-b1*a[i].y)/a[i].x; A=k1*k1+k2*k2+1; B=2*k2*b2-k2*a[i].x+2*k1*b1-k1*a[i].y-a[i].z; C=b2*b2-b2*a[i].x+b1*b1-b1*a[i].y; delta=B*B-4*A*C; if(delta<0) continue; z1=(-B+sqrt(delta))/(2*A); y1=k1*z1+b1; x1=k2*z1+b2; num=2; cnt[0]=i; cnt[1]=j; for(int jj=0;jj<n;jj++) { if(jj==i||jj==j) continue; A=x1*x1+y1*y1+z1*z1; B=-2*(x1*a[jj].x+y1*a[jj].y+z1*a[jj].z); C=a[jj].x*a[jj].x+a[jj].y*a[jj].y+a[jj].z*a[jj].z-a[jj].r*a[jj].r; if(B*B-4*A*C>=0) cnt[num++]=jj; } if(ans<num) { ans=num; for(int jj=0;jj<ans;jj++) an[jj]=cnt[jj]; } A=k1*k1+k2*k2+1; B=2*k2*b2-k2*a[i].x+2*k1*b1-k1*a[i].y-a[i].z; C=b2*b2-b2*a[i].x+b1*b1-b1*a[i].y; delta=B*B-4*A*C; z1=(-B-sqrt(delta))/(2*A); y1=k1*z1+b1; x1=k2*z1+b2; num=2; cnt[0]=i; cnt[1]=j; for(int jj=0;jj<n;jj++) { if(jj==i||jj==j) continue; A=x1*x1+y1*y1+z1*z1; B=-2*(x1*a[jj].x+y1*a[jj].y+z1*a[jj].z); C=a[jj].x*a[jj].x+a[jj].y*a[jj].y+a[jj].z*a[jj].z-a[jj].r*a[jj].r; if(B*B-4*A*C>=0) cnt[num++]=jj; } if(ans<num) { ans=num; for(int jj=0;jj<ans;jj++) an[jj]=cnt[jj]; } } } } printf("%d\n",ans); sort(an,an+ans); for(i=0;i<ans;i++) printf("%d ",an[i]+1); printf("\n"); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator