zoukankan      html  css  js  c++  java
  • 洛谷 4035 [JSOI2008]球形空间产生器

    题目戳这里
    一句话题意

    给你 n+1 个 n 维点,需要你求出这个n维球的球心。(n<=10)

    Solution

    这个题目N维的话确实不好想,反正三维就已经把我搞懵了,所以只好拿二维类比。
    首先因为球心到边上的点距离相等,所以我们可以列出三个式子:
    设 球心坐标为((x_0)(y_0))
    ((x_1-x_0)^2+(y_1-y_0)^2=r^2)

    ((x_2-x_0)^2+(y_2-y_0)^2=r^2)

    ((x_3-x_0)^2+(y_3-y_0)^2=r^2)
    三个式子中都有r和平方项不好计算,所以我们用1式减2式,2式减3式,就得到两个式子:
    (x_1^2-x_2^2-2x_1x_0+2x_2x_0+y_1^2-y_2^2-2y_1y_0+2y_2y_0=0)

    (x_2^2-x_3^2-2x_2x_0+2x_3x_0+y_2^2-y_3^2-2y_2y_0+2y_3y_0=0)
    (x_1,y_1,x_2,y_2,x_3,y_3)都是已知的,可以看成常数项和系数。
    再整理一下:
    (2(x_2-x_1)x_0+2(y_2-y_1)y_0=x_2^2-x1^2+y_2^2-y_1^2)

    (2(x_3-x_2)x_0+2(y_3-y_2)y_0=x_3^2-x2^2+y_3^2-y_2^2)
    很明显一个二元一次方程组,然后使用高斯消元就可以求出球心。
    这样就很容易推到N维了,这里就不一一写出,大家自己手推一下吧。主要是太麻烦了

    Coding

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 105;
    double s[N][N],ans[N],A[N][N];
    int n,flag=1;
    void Solve(int x)
    {
      if(x==n){  ans[x]=s[x][n+1]/s[x][x]; return; }
      for(int i=x+1;i<=n;i++)
      {
        double box=abs(s[x][x])/abs(s[i][x]);
        if(s[x][x]*s[i][x]>0)
          for(int j=x;j<=n+1;j++)
            s[i][j]*=box,s[i][j]=s[i][j]-s[x][j];
        else
          for(int j=x;j<=n+1;j++)
            s[i][j]*=box,s[i][j]=s[i][j]+s[x][j];
      }
      Solve(x+1);
      for(int i=n;i>=x+1;i--)
      	s[x][n+1]-=(ans[i]*s[x][i]); 
      ans[x]=s[x][n+1]/s[x][x];
      return ;
    }
    int main()
    {
        cin>>n;
        for(int i=1;i<=n+1;i++)
            for(int j=1;j<=n;j++)
            scanf("%lf",&A[i][j]);
        for(int i=2;i<=n+1;i++)
            for(int j=1;j<=n;j++)
            {
                s[i-1][j]=2*(A[i][j]-A[i-1][j]);
                s[i-1][n+1]+=(A[i][j]*A[i][j]-A[i-1][j]*A[i-1][j]);
            }
        Solve(1);
        for(int i=1;i<=n;i++)
        printf("%.3lf ",ans[i]);
        return 0;
    }
    
  • 相关阅读:
    关于存储过程
    关于TSql
    SQL问题+知识点总结总
    基于IEC61499标准的组件
    使用Irony开发译码器
    C#早期绑定&后期绑定
    .NET组件 vs. COM组件
    C#委托和事件
    广度优先搜索(BreadthFirstSearch)& 迪克斯特拉算法 (Dijkstra's algorithm)
    选择排序法&快速排序法
  • 原文地址:https://www.cnblogs.com/Le-mon/p/9641230.html
Copyright © 2011-2022 走看看