| ||||||||||
| 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 | |||||||||
Re:Why wa? I've been trying on tihs for several days...In Reply To:Why wa? I've been trying on tihs for several days... Posted by:szwj at 2008-03-05 16:07:35 > #include <stdio.h>
> #include <math.h>
>
> double pl[30][3];
> double formula[3][4];
>
> inline double dim2(int a,int b)
> {
> double x=(pl[a][0]+pl[b][0])/2,y=(pl[a][1]+pl[b][1])/2,z=(pl[a][2]+pl[b][2])/2;
> double ret=(x-pl[a][0])*(x-pl[a][0])+(y-pl[a][1])*(y-pl[a][1])+(z-pl[a][2])*(z-pl[a][2]);
> if(fabs(ret)<1e-7)
> return -1;
> else
> return ret;
> }
>
> inline double fdet3(int a,int b,int c)
> {
> return formula[0][a]*formula[1][b]*formula[2][c]
> +formula[0][b]*formula[1][c]*formula[2][a]
> +formula[0][c]*formula[1][a]*formula[2][b]
> -formula[0][c]*formula[1][b]*formula[2][a]
> -formula[0][a]*formula[1][c]*formula[2][b]
> -formula[0][b]*formula[1][a]*formula[2][c];
> }
>
> inline bool solve3(double &x,double &y,double &z)
> {
> double comm=fdet3(0,1,2);
> if(fabs(comm)<1e-7)
> return false;
> x=fdet3(3,1,2)/comm;
> y=fdet3(0,3,2)/comm;
> z=fdet3(0,1,3)/comm;
> return true;
> }
>
> inline double dim3(int a,int b,int c)
> {
> int i;
> formula[0][3]=0; formula[1][3]=0; formula[2][3]=0;
> for(i=0;i<3;i++)
> {
> formula[0][i]=pl[a][i]-pl[b][i];
> formula[1][i]=pl[a][i]-pl[c][i];
> formula[0][3]+=formula[0][i]*(pl[a][i]+pl[b][i])/2;
> formula[1][3]+=formula[1][i]*(pl[a][i]+pl[c][i])/2;
> }
> double sl=0.0;
> formula[2][0]=formula[0][1]*formula[1][2]-formula[0][2]*formula[1][1];
> formula[2][1]=-formula[0][0]*formula[1][2]+formula[0][2]*formula[1][0];
> formula[2][2]=formula[0][0]*formula[1][1]-formula[0][1]*formula[1][0];
> if(fabs(formula[2][0])<1e-7 && fabs(formula[2][1])<1e-7 && fabs(formula[2][2])<1e-7)
> return -1;
> for(i=0;i<3;i++)
> formula[2][3]+=formula[2][i]*pl[a][i];
> double x,y,z;
> if(solve3(x,y,z))
> return (x-pl[a][0])*(x-pl[a][0])+(y-pl[a][1])*(y-pl[a][1])+(z-pl[a][2])*(z-pl[a][2]);
> else
> return -1;
> }
>
> inline double dim4(int a,int b,int c,int d)
> {
> int i;
> formula[0][3]=0; formula[1][3]=0; formula[2][3]=0;
> for(i=0;i<3;i++)
> {
> formula[0][i]=pl[a][i]-pl[b][i];
> formula[1][i]=pl[a][i]-pl[c][i];
> formula[2][i]=pl[a][i]-pl[d][i];
> formula[0][3]+=formula[0][i]*(pl[a][i]+pl[b][i])/2;
> formula[1][3]+=formula[1][i]*(pl[a][i]+pl[c][i])/2;
> formula[2][3]+=formula[2][i]*(pl[a][i]+pl[d][i])/2;
> }
> double x,y,z;
> if(solve3(x,y,z))
> return (x-pl[a][0])*(x-pl[a][0])+(y-pl[a][1])*(y-pl[a][1])+(z-pl[a][2])*(z-pl[a][2]);
> else
> return -1;
> }
>
> int main()
> {
> int n;
> while(scanf("%d",&n),n)
> {
> int i,j,k,l;
> double max=-1,temp;
> for(i=0;i<n;i++)
> for(j=0;j<3;j++)
> scanf("%lf",&pl[i][j]);
> for(i=0;i<n;i++)
> for(j=i+1;j<n;j++)
> {
> temp=dim2(i,j);
> if(temp>max)
> max=temp;
> }
> for(i=0;i<n;i++)
> for(j=i+1;j<n;j++)
> for(k=j+1;k<n;k++)
> {
> temp=dim3(i,j,k);
> if(temp>max)
> max=temp;
> }
> for(i=0;i<n;i++)
> for(j=i+1;j<n;j++)
> for(k=j+1;k<n;k++)
> for(l=k+1;l<n;l++)
> {
> temp=dim4(i,j,k,l);
> if(temp>max)
> max=temp;
> }
> printf("%0.5lf\n",sqrt(max)+1e-7);
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator