bzoj 1013: [JSOI2008]球形空间产生器sphere
裸地高斯消元。。
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int n;
const double eps=1e-6;
double f[22],a[22][22];
inline void gauss()
{
register int i,j,k;
int now=1,to;double t;
for(i=1;i<=n;i++)
{
for (to=now;to<=n;to++) if(fabs(a[to][i])>eps)break;
if (to>n) continue;
if (to!=now) for(j=1;j<=n+1;j++) swap(a[to][j],a[now][j]);t=a[now][i];
for (j=1;j<=n+1;j++) a[now][j]/=t;
for (j=1;j<=n;j++)
if(j!=now)
{
t=a[j][i];
for (k=1;k<=n+1;k++) a[j][k]-=t*a[now][k];
}
now++;
}
}
int main()
{
register int i,j;
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%lf",&f[i]);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
double t;
scanf("%lf",&t);
a[i][j]=2*(t-f[j]);
a[i][n+1]+=pow(t,2)-pow(f[j],2);
}
gauss();
for (i=1;i<=n-1;i++) printf("%.3lf ",a[i][n+1]);printf("%.3lf\n",a[n][n+1]);
return 0;
}