[JSOI2008]球形空间产生器
[[JSOI2008]球形空间产生器](https://www.luogu.org/problemnew/show/P4035)
高斯消元搞一搞
#include<cstdio> #include<cstring> #include<algorithm> const int maxn = 17; int n; double loc[maxn][maxn]; double st[maxn],x[maxn]; void gauss() { int t; for(int i=1;i<=n;++i) { t=i; for(int j=i+1;j<=n;++j) if(loc[j][i]>loc[t][i]) t=j; if(t!=i) for(int j=i;j<=n+1;++j) std::swap(loc[t][j],loc[i][j]); for(int j=i+1;j<=n;++j) { double tmp=loc[i][i]/loc[j][i]; for(int k=i+1;k<=n+1;++k) loc[j][k]=loc[i][k]-tmp*loc[j][k]; } } for(int i=n;i>=1;--i) { for(int j=i+1;j<=n;++j) loc[i][n+1]-=x[j]*loc[i][j]; x[i]=loc[i][n+1]/loc[i][i]; } } int main() { scanf("%d",&n); for(int i=1;i<=n;++i)scanf("%lf",&st[i]); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) { double tmp; scanf("%lf",&tmp); loc[i][j]=2*(st[j]-tmp); loc[i][n+1]+=st[j]*st[j]-tmp*tmp; } gauss(); for(int i=1;i<=n;++i) printf("%.3lf ",x[i]); return 0; }