zoukankan      html  css  js  c++  java
  • 【BZOJ1013】球形空间产生器(高斯消元)

    【BZOJ1013】球形空间产生器(高斯消元)

    题面

    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

    题解

    (n)个未知数
    却有(n+1)个方程

    但是,把所有的式子产开后,发现有平方项
    所以,随便选一个方程,和其他的所有方程形成等式
    消去平方项
    然后就是(n)个未知数(n)个方程
    高斯消元即可

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<vector>
    #include<queue>
    using namespace std;
    #define MAX 50
    double g[MAX][MAX],a[MAX][MAX],ans[MAX];
    double ss[MAX];
    int n;
    void Solve()
    {
    	for(int i=1;i<=n;++i)
    	{
    		for(int j=i+1;j<=n;++j)
    		{
    			double tt=g[j][i]/g[i][i];
    			for(int k=1;k<=n+1;++k)
    				g[j][k]-=g[i][k]*tt;
    		}
    	}
    	ans[n]=g[n][n+1]/g[n][n];
    	for(int i=n-1;i>=1;--i)
    	{
    		for(int j=i+1;j<=n;++j)
    			g[i][n+1]-=g[i][j]*ans[j];
    		ans[i]=g[i][n+1]/g[i][i];
    	}
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i=0;i<=n;++i)
    		for(int j=1;j<=n;++j)
    			scanf("%lf",&a[i][j]),ss[i]+=a[i][j]*a[i][j];
    	for(int i=1;i<=n;++i)
    	{
    		for(int j=1;j<=n;++j)
    			g[i][j]=2*(a[i][j]-a[0][j]);
    		g[i][n+1]=ss[i]-ss[0];
    	}
    	Solve();
    	for(int i=1;i<n;++i)
    		printf("%.3lf ",ans[i]);
    	printf("%.3lf
    ",ans[n]);
    	return 0;
    }
    
    
  • 相关阅读:
    [CDQ分治][Treap][树状数组]JZOJ 4419 Hole
    [数论]JZOJ 4421 aplusb
    [LCA]JZOJ 3717 火车
    [数位DP]JZOJ 3363 Number
    user模块User表
    数据库配置
    后台配置
    后台:Django项目创建
    虚拟环境的搭建
    luffy 那点事
  • 原文地址:https://www.cnblogs.com/cjyyb/p/8250624.html
Copyright © 2011-2022 走看看