• 数学:高斯消元


    BZOJ1013题目描述了一个n维空间中有一个球体,给定了这个球体上n+1个点的坐标,让你写出球心的n维坐标

    设球心坐标为(x1,x2,x3...xn)

    (a1-x1)^2+(a2-x2)^2+...(an-xn)^2=r^2

    (b1-x1)^2+(b2-x2)^2+...(bn-xn)^2=r^2

    ....

    只要拿后n个方程分别去减第一个方程,就可以得到n个一次方程了

    2*(a1-b1)x1+2*(a2-b2)*x2+.....+2*(an-bn)xn=a1^2-b1^2+a2^2-b2^2....an^2-bn^2

    然后就可以高斯消元了,在这里题目的思路不重要,重要的是高斯消元的写法

     1 #include<cstdio>
     2 #include<cmath>
     3 #include<algorithm>
     4 #define eps 1e-6
     5 using namespace std;
     6 const int maxn=25;
     7 int n;
     8 double f[maxn];
     9 double a[maxn][maxn];
    10 double sqr(double x) {return x*x;}
    11 bool gauss()
    12 {
    13     int now=1,to;
    14     double t;
    15     for(int i=1;i<=n;i++)
    16     {
    17         for(to=now;to<=n;to++)
    18             if(fabs(a[to][i])>eps) break;
    19         if(to>n) continue;
    20         if(to!=now)
    21             for(int j=1;j<=n+1;j++)
    22                 swap(a[to][j],a[now][j]);
    23         t=a[now][i];
    24         for(int j=1;j<=n+1;j++) a[now][j]/=t;
    25         for(int j=1;j<=n;j++)
    26             if(j!=now)
    27             {
    28                 t=a[j][i];
    29                 for(int k=1;k<=n+1;k++)
    30                     a[j][k]-=t*a[now][k];
    31             }
    32         now++;
    33     }
    34     for(int i=now;i<=n;i++)
    35         if(fabs(a[i][n+1])>eps) return 0;
    36     return 1;
    37 }
    38 int main()
    39 {
    40     double t;
    41     scanf("%d",&n);
    42     for(int i=1;i<=n;i++) scanf("%lf",&f[i]);
    43     for(int i=1;i<=n;i++)
    44         for(int j=1;j<=n;j++)
    45         {
    46             scanf("%lf",&t);
    47             a[i][j]=2*(t-f[j]);
    48             a[i][n+1]+=sqr(t)-sqr(f[j]);
    49         }
    50     gauss();
    51     for(int i=1;i<=n-1;i++) printf("%.3lf ",a[i][n+1]);
    52     printf("%.3lf
    ",a[n][n+1]);
    53     return 0;
    54 }
  • 相关阅读:
    python中的编码问题
    CVPR2018 Tutorial 之 Visual Recognition and Beyond
    hdu 1376 Octal Fractions
    hdu 1329 Hanoi Tower Troubles Again!
    hdu 1309 Loansome Car Buyer
    hdu 1333 Smith Numbers
    hdu 1288 Hat's Tea
    hdu 1284 钱币兑换问题
    hdu 1275 两车追及或相遇问题
    hdu 1270 小希的数表
  • 原文地址:https://www.cnblogs.com/aininot260/p/9583058.html
Copyright © 2020-2023  润新知