【BZOJ】1013 [JSOI2008]球形空间产生器sphere(高斯消元)
题目
传送门:QWQ
分析
高斯消元就是个大暴力。。。。
代码
#include <bits/stdc++.h> using namespace std; const int maxn = 105; const double eps = 1e-7; int n; double a[maxn][maxn], b[maxn][maxn] ,c[maxn]; double sqr(double a) {return a*a;} void Gauss() { int n; scanf("%d",&n); for(int i=1;i<=n+1;i++) for(int j=1;j<=n;j++) scanf("%lf",&a[i][j]); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { b[i][j] = 2* (a[i][j] - a[i+1][j]); c[i] += sqr(a[i][j]) - sqr(a[i+1][j]); } } for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++) { if(fabs(b[i][j]) > eps) { for(int k=1;k<=n;k++) swap(b[i][k], b[j][k]); swap(c[i],c[j]); } } for(int j=1;j<=n;j++) { if(j==i) continue; double rate = b[j][i] / b[i][i]; for(int k=1;k<=n;k++) { b[j][k] -= b[i][k] *rate; } c[j] -= c[i] * rate; } } for(int i=1;i<n;i++) printf("%.3f ",c[i] / b[i][i]); printf("%.3f\n",c[n]/b[n][n]); } int main() { Gauss(); }