题链:http://www.lydsy.com/JudgeOnline/problem.php?id=1013

1013: [JSOI2008]球形空间产生器sphere

时间限制: 1 Sec  内存限制: 162 MB

提交: 3063  解决: 1607

[提交][][]

题目描写叙述

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

输入

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

输出

有且仅仅有一行。依次给出球心的n维坐标(n个实数),两个实数之间用一个空格隔开。每一个实数精确到小数点后3位。数据保证有解。

你的答案必须和标准输出一模一样才可以得分。

例子输入

2

0.0 0.0

-1.0 1.0

1.0 0.0

例子输出

0.500 1.500

提示

数据规模:



对于40%的数据,1<=n<=3



对于100%的数据,1<=n<=10



提示:给出两个定义:



1、 球心:到球面上随意一点距离都相等的点。



2、 距离:设两个n为空间上的点A, B的坐标为(a1, a2, …, an), (b1, b2, …, bn),则AB的距离定义为:dist = sqrt( (a1-b1)^2 + (a2-b2)^2 + … + (an-bn)^2 )

做法:把圆心坐标设成 x1,x2,x3.... ,有若干个点  当中两个点坐标为a1,a2, a3....    和b1,b2,b3.

能够写出方程

sqrt((a1-x1)^2+(a2-x2)^2+(a3-x3)^2)=sqrt((b1-x1)^2+(b2-x2)^2+(b3-x3)^2)

两边去根号。

(a1-x1)^2+(a2-x2)^2+(a3-x3)^2=(b1-x1)^2+(b2-x2)^2+(b3-x3)^2

把平分打开

a1^2+x1^2+a2^2+x2^2+a3^2+x3^2-2*a1*x1-2*a2*x2-2*a3*x3=b1^2+x1^2+b2^2+x2^2+b3^2+x3^2-2*b1*x1-2*b2*x2-2*b3*x3

整理下 把x的二次方 两边都减去。把x的一次放左边 0次项放右边。

-2*a1*x1-2*a2*x2-2*a3*x3+2*b1*x1+2*b2*x2+2*b3*x3=b1^2+b2^2+b3^2-a1^2-a2^2-a3^2

整理下

(-2*a1+2*b1)*x1+(-2*a2+2*b2)*x2+(-2*a3+2*b3)*x3=b1^2+b2^2+b3^2-a1^2-a2^2-a3^2

一共同拥有n+1个点,所以能够写出n条这种等式。

最后的形式就是AX=b了, 然后就能够高斯消元了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#include <stack>
#include <queue>
#include <vector>
#include <deque>
#include <set>
#include <map> #define eps 1e-9
const int MAXN=220;
double a[MAXN][MAXN],x[MAXN];//方程的左边的矩阵和等式右边的值,求解之后x存的就是结果
int equ,var;//方程数和未知数个数
/*
*返回0表示无解。1表示有解
*/
int Gauss()
{
int i,j,k,col,max_r;
for(k=0,col=0;k<equ&&col<var;k++,col++)
{
max_r=k;
for(i=k+1;i<equ;i++)
if(fabs(a[i][col])>fabs(a[max_r][col]))
max_r=i;
if(fabs(a[max_r][col])<eps)return 0;
if(k!=max_r)
{
for(j=col;j<var;j++)
swap(a[k][j],a[max_r][j]);
swap(x[k],x[max_r]);
}
x[k]/=a[k][col];
for(j=col+1;j<var;j++)a[k][j]/=a[k][col];
a[k][col]=1;
for(i=0;i<equ;i++)
if(i!=k)
{
x[i]-=x[k]*a[i][k];
for(j=col+1;j<var;j++)a[i][j]-=a[k][j]*a[i][col];
a[i][col]=0;
}
}
return 1;
} double dian[13][13];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n+1;i++)
for(int j=0;j<n;j++)
scanf("%lf",&dian[i][j]);
equ=n;
var=n;
memset(x,0,sizeof x);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
a[i][j]=-2.0*dian[i][j]+2*dian[i+1][j];
for(int j=0;j<n;j++)
x[i]+=dian[i+1][j]*dian[i+1][j]-dian[i][j]*dian[i][j];
}
Gauss();
for(int i=0;i<n;i++)
{
if(i!=0)
printf(" ");
printf("%.3lf",x[i]);
}
}
return 0;
}

lydsy1013: [JSOI2008]球形空间产生器sphere 高斯消元的更多相关文章

  1. BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/Judg ...

  2. [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)

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

  3. BZOJ-1013 球形空间产生器sphere 高斯消元+数论推公式

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3662 Solved: 1910 [Subm ...

  4. 【BZOJ 1013】【JSOI2008】球形空间产生器sphere 高斯消元基础题

    最基础的高斯消元了,然而我把j打成i连WA连跪,考场上再犯这种错误就真的得滚粗了. #include<cmath> #include<cstdio> #include<c ...

  5. [JSOI2008]球形空间产生器 (高斯消元)

    [JSOI2008]球形空间产生器 \(solution:\) 非常明显的一道高斯消元.给了你n+1个球上的位置,我们知道球上任何一点到球心的距离是相等,所以我们 可以利用这一个性质.我们用n+1个球 ...

  6. BZOJ 1013 球形空间产生器sphere 高斯消元

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1013 题目大意: 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困 ...

  7. BZOJ1013球形空间产生器sphere 高斯消元

    @[高斯消元] Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球 ...

  8. bzoj1013球形空间产生器sphere 高斯消元(有系统差的写法

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

  9. 洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)

    洛谷题目传送门 球啊球 @xzz_233 qaq 高斯消元模板题,关键在于将已知条件转化为方程组. 可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机. 由 ...

随机推荐

  1. C# WebService 的缓存机制

    C# WebService 的缓存机制   [转]WebService的缓存机制 2008年02月19日 星期二 11:22 WebService的缓存分为两种,一种是简单的输出缓存,一种是强大的数据 ...

  2. better-scroll的使用

    <template> <div> <div> <h2 class="h2">{{msg}}</h2> </div& ...

  3. Shiro框架 (原理分析与简单实现)

    Shiro框架(原理分析与简单实现) 有兴趣的同学也可以阅读我之前分享的:Java权限管理(授权与认证)CRM权限管理   (PS : 这篇博客里面的实现方式没有使用框架,完全是手写的授权与认证,可以 ...

  4. Linux htop工具使用详解【转】

    原文地址: http://www.cnphp6.com/archives/65078 一.Htop的使用简介 大家可能对top监控软件比较熟悉,今天我为大家介绍另外一个监控软件Htop,姑且称之为to ...

  5. mysql错误Error(1133): Can’t find any matching row in the use

    执行插入用户语句没有问题,但是执行权限赋值的时候提示:1133 - Can't find any matching row in the user table; 解决办法:插入新的用户成功时,需要刷新 ...

  6. Hadoop-2.7.1伪分布--安装配置hbase 1.1.2

    hbase-1.1.2下载地址:http://www.eu.apache.org/dist/hbase/stable/hbase-1.1.2-bin.tar.gz 下载之后解压至\usr\local目 ...

  7. Python的发展与应用

    cpu 内存 硬盘 操作系统 ​ cpu:计算机的运算和计算中心,相当于人类大脑.飞机 ​ 内存:暂时存储数据,临时加载数据应用程序,4G,8G,16G,32G ​ 速度快,高铁,断电即消失.造价很高 ...

  8. HDU 2647 逆向拓扑排序

    令每一个员工都有一个自己的等级level[i] , 员工等级越高,那么工资越高,为了使发的钱尽可能少,所以每一级只增加一单位的钱 输入a b表示a等级高于b,那么我们反向添加边,令b—>a那么i ...

  9. 【状压+状态转移】A Famous Airport Managere

    https://www.bnuoj.com/v3/problem_show.php?pid=25653 [题意] 给定一个3*3的九宫格,模拟一个停机坪.第一个格子一定是'*',代表take off ...

  10. bzoj3304[Shoi2005]带限制的最长公共子序列 DP

    题意:给出三个序列,求出前两个的公共子序列,且包含第三个序列,要求长度最长. 这道题目怎么做呢,f[i][j]表示a串1-i,b串1-j的最长,g[i][j]表示a串i-n,b串j-m最长, 那么只需 ...