| ||||||||||
| 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 | |||||||||
Why wa? I've been trying on tihs for several days...#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