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

时间:2023-12-29 20:39:14

题目

传送门:QWQ

分析

高斯消元就是个大暴力。。。。

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn = ;
const double eps = 1e-;
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=;i<=n+;i++)
for(int j=;j<=n;j++)
scanf("%lf",&a[i][j]);
for(int i=;i<=n;i++) {
for(int j=;j<=n;j++) {
b[i][j] = * (a[i][j] - a[i+][j]);
c[i] += sqr(a[i][j]) - sqr(a[i+][j]);
}
}
for(int i=;i<=n;i++) {
for(int j=i;j<=n;j++) {
if(fabs(b[i][j]) > eps) {
for(int k=;k<=n;k++) swap(b[i][k], b[j][k]);
swap(c[i],c[j]);
}
}
for(int j=;j<=n;j++) {
if(j==i) continue;
double rate = b[j][i] / b[i][i];
for(int k=;k<=n;k++) {
b[j][k] -= b[i][k] *rate;
}
c[j] -= c[i] * rate;
}
}
for(int i=;i<n;i++) printf("%.3f ",c[i] / b[i][i]);
printf("%.3f\n",c[n]/b[n][n]);
}
int main() {
Gauss();
}