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


    题目:

    http://www.lydsy.com/JudgeOnline/problem.php?id=1013


    题解:

    考虑二维的我们可以明白一个道理:

    两个点左边可以表示一个方程,然后用两两方程相减得到一个一次方程

    这样用高斯消元就可以做了

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #define N 13
    using namespace std;
    int n,m;
    double c[N][N],f[N][N],ans[N];
    inline void Gauss()
    {
        for (int i=1;i<=n;i++)
        {
        int l=i;
        for (int j=l+1;j<=n;j++)
            if (fabs(f[l][i]) < fabs(f[j][i])) l=j;
        if (l!=i)
            for (int j=i;j<=m;j++)
            swap(f[l][j],f[i][j]);
        for (int j=i+1;j<=n;j++)
        {
            double temp=f[j][i]/f[i][i];
            for (int k=i;k<=m;k++)
            f[j][k]=f[j][k]-f[i][k]*temp;
        }
        }
        for (int i=n;i>=1;i--)
        {
        double t=f[i][m];
        for (int j=n;j>i;j--)
            t-=ans[j]*f[i][j];
        ans[i]=t/f[i][i];
        }
    }
    int main()
    {
        scanf("%d",&n);m=n+1;
        for (int i=0;i<=n;i++)
        for (int j=1;j<=n;j++)
            scanf("%lf",&c[i][j]);
        for (int i=1;i<=n;i++)
        {
        int j=i-1;double d=0;
        for (int k=1;k<=n;k++)
        {
            f[i][k]=(c[i][k]-c[j][k])*2;
            d+=c[i][k]*c[i][k]-c[j][k]*c[j][k];
        }
        f[i][m]=d;
        }
        Gauss();
        for (int i=1;i<=n;i++)
        if (i<n) printf("%.3lf ",ans[i]);
        else printf("%.3lf
    ",ans[i]);
        return 0;
    }
  • 相关阅读:
    偏倚有感
    SAS--修改默认语言
    SAS--EXCEL读写、批量读EXCEL
    SAS--sql2
    Day2----respondToValue
    python的一些遗漏用法
    一些常见的东西
    爬虫学习06用selenium爬取空间
    爬虫学习04.
    爬虫学习03常用模块
  • 原文地址:https://www.cnblogs.com/mrsheep/p/8258597.html
Copyright © 2020-2023  润新知