[BZOJ1013][JSOI2008]球形空间产生器
话说最早听说的算法之一是高斯消元法,三十多年了。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n;
double x[11][11],y[11][11];
int main(){
int i,j,k;
scanf("%d",&n);
for(i=0;i<=n;i++){
for(j=1;j<=n;j++) scanf("%lf",x[i]+j);
if(i>0){
y[i][0]=0;
for(j=1;j<=n;j++){
y[i][j]=(x[i][j]-x[0][j])*2;
y[i][0]+=x[i][j]*x[i][j]-x[0][j]*x[0][j];
}
}
}
for(i=1;i<=n;i++){
int s1=i;
for(j=i+1;j<=n;j++) if(abs(y[j][i])>abs(y[s1][i])) s1=j;
for(j=0;j<=n;j++) {
double t1=y[i][j]; y[i][j]=y[s1][j]; y[s1][j]=t1;
}
double w=y[i][i];
for(j=0;j<=n;j++) y[i][j]/=w;
for(j=1;j<=n;j++) if(j!=i&&y[j][i]!=0) {
w=y[j][i];
for(k=0;k<=n;k++) y[j][k]=y[j][k]-w*y[i][k];
}
}
for(i=1;i<=n;i++){
printf("%.3lf",y[i][0]);
if(i<n) printf(" ");
else printf("\n");
}
return 0;
}

浙公网安备 33010602011771号