• BZOJ1013:[JSOI2008]球形空间产生器sphere(高斯消元)


    Description

      有一个球形空间产生器能够在n维空间中产生一个坚硬的球体。现在,你被困在了这个n维球体中,你只知道球
    面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器。

    Input

      第一行是一个整数n(1<=N=10)。接下来的n+1行,每行有n个实数,表示球面上一点的n维坐标。每一个实数精确到小数点
    后6位,且其绝对值都不超过20000。

    Output

      有且只有一行,依次给出球心的n维坐标(n个实数),两个实数之间用一个空格隔开。每个实数精确到小数点
    后3位。数据保证有解。你的答案必须和标准输出一模一样才能够得分。

    Sample Input

    2
    0.0 0.0
    -1.0 1.0
    1.0 0.0

    Sample Output

    0.500 1.500

    HINT

    Solution

    Code

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<cmath>
     5 #define N  (101)
     6 using namespace std;
     7 
     8 double p[N][N],f[N][N],ans[N];
     9 int n;
    10 
    11 void Gauss()
    12 {
    13     for (int i=1; i<=n; ++i)
    14     {
    15         int num=i;
    16         for (int j=i+1; j<=n; ++j)
    17             if (fabs(f[j][i])>fabs(f[num][i])) num=j;
    18         if (num!=i) swap(f[i],f[num]);
    19         for (int j=i+1; j<=n; ++j)
    20         {
    21             double t=f[j][i]/f[i][i];
    22             for (int k=i; k<=n+1; ++k)
    23                 f[j][k]-=t*f[i][k];
    24         }
    25     }
    26     for (int i=n; i>=1; --i)
    27     {
    28         for (int j=i+1; j<=n; ++j)
    29             f[i][n+1]-=f[i][j]*ans[j];
    30         ans[i]=f[i][n+1]/f[i][i];
    31     }
    32 }
    33 
    34 int main()
    35 {
    36     scanf("%d",&n);
    37     for (int i=1; i<=n+1; ++i)
    38         for (int j=1; j<=n; ++j)
    39             scanf("%lf",&p[i][j]);
    40     for (int i=1; i<=n; ++i)
    41         for (int j=1; j<=n; ++j)
    42         {
    43             f[i][n+1]+=p[i][j]*p[i][j]-p[i+1][j]*p[i+1][j];
    44             f[i][j]=2*(p[i][j]-p[i+1][j]);
    45         }
    46     Gauss();
    47     for (int i=1; i<=n-1; ++i)
    48         printf("%.3lf ",ans[i]);
    49     printf("%.3lf
    ",ans[n]);
    50 }
  • 相关阅读:
    FZU Monthly-201906 tutorial
    FZU Monthly-201906 获奖名单
    FZU Monthly-201905 tutorial
    BZOJ1009 GT考试
    BZOJ2428 均分数据
    模拟退火
    BZOJ3680 吊打XXX
    BZOJ4818 序列计数
    BZOJ4103 异或运算
    BZOJ3512 DZY Loves Math IV
  • 原文地址:https://www.cnblogs.com/refun/p/8950100.html
Copyright © 2020-2023  润新知