zoukankan      html  css  js  c++  java
  • 数学:高斯消元

    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 }
  • 相关阅读:
    Ubuntu 13.04 配置Cocos2d-x记录
    Ubuntu系列Crontab日记记录
    只是为了拾起一只笔,所以写了这些
    XhProf安装教程–详细教程
    检查.gitignore语法
    JavaScript设置右下角悬浮窗
    Codeforces Round #428 (Div. 2) B
    2017 多校5 hdu 6093 Rikka with Number
    cf 834 E. Ever-Hungry Krakozyabra
    codeforces 834 D. The Bakery
  • 原文地址:https://www.cnblogs.com/aininot260/p/9583058.html
Copyright © 2011-2022 走看看