1. 程式人生 > >【BZOJ】1013 [JSOI2008]球形空間產生器sphere(高斯消元)

【BZOJ】1013 [JSOI2008]球形空間產生器sphere(高斯消元)

bzoj 消元 line str ++ pac void www 是個

題目

傳送門: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(); }

【BZOJ】1013 [JSOI2008]球形空間產生器sphere(高斯消元)