zoukankan      html  css  js  c++  java
  • 球形空间产生器sphere(bzoj 1013)

    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

      提示:给出两个定义:1、 球心:到球面上任意一点距离都相等的点。2、 距离:设两个n为空间上的点A, B

    的坐标为(a1, a2, …, an), (b1, b2, …, bn),则AB的距离定义为:dist = sqrt( (a1-b1)^2 + (a2-b2)^2 + 

    … + (an-bn)^2 )

    /*
        拿n=2来举例说明:
        设圆心坐标为(x,y),当一个点坐标为(a,b)时,有 
        r=(a-x)^2+(b-y)^2=a^2-2ax+x^2+b^2-2by+y^2
        另一个点坐标为(a1,b1)时,有
        r=(a1-x)^2+(b1-y)^2=a1^2-2a1x+x^2+b1^2-2b1y+y^2
        可得
        2(a1-a)x+2(b1-b)y=a1^2-a^2+b1^2-b^2
        依此类推,可以得到n个式子,然后高斯消元。 
    */
    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #define N 15
    using namespace std;
    double x[N][N],a[N][N];int n;
    void gauss(){
        for(int i=1;i<=n;i++){
            int id=i;double maxn=fabs(a[i][i]);
            for(int j=i+1;j<=n;j++) if(fabs(a[j][i])>maxn) maxn=fabs(a[j][i]),id=i;
            if(id!=i) swap(id,i);
            double 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) continue;
                double 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",&x[0][i]);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                scanf("%lf",&x[i][j]);
                a[i][n+1]+=x[0][j]*x[0][j]-x[i][j]*x[i][j];
                a[i][j]+=2*(x[0][j]-x[i][j]);
            }
        }
        gauss();
        for(int i=1;i<n;i++)
            printf("%.3lf ",a[i][n+1]);
        printf("%.3lf
    ",a[n][n+1]);
        return 0;    
    }
  • 相关阅读:
    HDU 1813 Escape from Tetris
    BZOJ 2276 Temperature
    BZOJ 4499 线性函数
    BZOJ 3131 淘金
    HDU 5738 Eureka
    POJ 2409 Let it Bead
    POJ 1286 Necklace of Beads
    POJ 1696 Space Ant
    Fox And Jumping
    Recover the String
  • 原文地址:https://www.cnblogs.com/harden/p/6607679.html
Copyright © 2011-2022 走看看