[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; }