【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();
}

 

 

 

posted @ 2018-10-03 23:31  noble_(noblex)  阅读(153)  评论(0编辑  收藏  举报
/* */