1013: [JSOI2008]球形空间产生器sphere 高斯消元

第一次写高斯消元。
高斯消元就是通过不断的消去然后回代解n元一次方程组。
本题可以根据距离得到n个方程,然后上gauss就好了。

#include<cstdio>
#include<cstring>
#include<cmath>
#define eps 1e-6
using namespace std;
int n;
double f[15];
double a[15][15];
inline double sqr(double x)
{
    return x*x;
}
void gauss()
{
    int y;
    double t;
    for (int i=1;i<=n;i++)
    {
        for (y=i;y<=n;y++) 
            if (fabs(a[y][i])>eps) break;
        if (y>n) continue;
        if (y!=i) 
            for (int j=1;j<=n+1;j++) swap(a[i][j],a[y][j]);
        t=a[i][i];
        for (int j=1;j<=n+1;j++) a[i][j]/=t;
        for (int j=1;j<=n;j++)
            if (j!=i)
            {
                t=a[j][i];
                for (int k=1;k<=n+1;k++)
                    a[j][k]-=t*a[i][k];
            }
    }
}
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++) scanf("%lf",&f[i]);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
        {
            double t;
            scanf("%lf",&t);
            a[i][j]=2*(t-f[j]);
            a[i][n+1]+=sqr(t)-sqr(f[j]);
        }
    gauss();
    for (int i=1;i<n;i++) printf("%.3lf ",a[i][n+1]);
    printf("%.3lf\n",a[n][n+1]);
    return 0;
}

你可能感兴趣的:(1013: [JSOI2008]球形空间产生器sphere 高斯消元)