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

  提示:给出两个定义:

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

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


对于每两个n维点p1和p2,若球心是p,可以得到方程

dis=sqrt((p11−p1)2+(p12−p2)2+...+(p1n−pn)2)" role="presentation">dis=sqrt((p11−p1)2+(p12−p2)2+...+(p1n−pn)2)dis=sqrt((p11−p1)2+(p12−p2)2+...+(p1n−pn)2)

dis=sqrt((p21−p1)2+(p22−p2)2+...+(p2n−pn)2)" role="presentation">dis=sqrt((p21−p1)2+(p22−p2)2+...+(p2n−pn)2)dis=sqrt((p21−p1)2+(p22−p2)2+...+(p2n−pn)2)

所以可以发现

dis2=(p11−p1)2+(p12−p2)2+...+(p1n−pn)2=(p21−p1)2+(p22−p2)2+...+(p2n−pn)2" role="presentation">dis2=(p11−p1)2+(p12−p2)2+...+(p1n−pn)2=(p21−p1)2+(p22−p2)2+...+(p2n−pn)2dis2=(p11−p1)2+(p12−p2)2+...+(p1n−pn)2=(p21−p1)2+(p22−p2)2+...+(p2n−pn)2

完全平方项展开后可以发现只关于p元素的完全平方项可以消除,整理得

2∗(p11−p21)∗p1+2∗(p12−p22)∗p2+...+2∗(p1n−p2n)∗pn=(p11)2+(p12)2+...(p1n)2−(p21)2−(p22)2−...−(p2n)2" role="presentation">2∗(p11−p21)∗p1+2∗(p12−p22)∗p2+...+2∗(p1n−p2n)∗pn=(p11)2+(p12)2+...(p1n)2−(p21)2−(p22)2−...−(p2n)22∗(p11−p21)∗p1+2∗(p12−p22)∗p2+...+2∗(p1n−p2n)∗pn=(p11)2+(p12)2+...(p1n)2−(p21)2−(p22)2−...−(p2n)2

发现是关于p元素的一次方程,又因为给出了n+1个n维坐标,所以可以得到一个n元一次方程组,用高斯消元解决


#include<bits/stdc++.h>
using namespace std;
#define N 30
int n;
double a[N][N];
void gauss(){
for(int i=1;i<=n;i++){
int r=i;
for(int j=i+1;j<=n;j++)
if(fabs(a[j][i])>fabs(a[r][i]))r=j;
if(r!=i)for(int j=1;j<=n+1;j++)swap(a[r][j],a[i][j]);
for(int k=i+1;k<=n;k++){
double f=a[k][i]/a[i][i];
for(int j=i;j<=n+1;j++)a[k][j]-=f*a[i][j];
}
}
for(int i=n;i;i--){
for(int j=i+1;j<=n;j++)
a[i][n+1]-=a[j][n+1]*a[i][j];
a[i][n+1]/=a[i][i];
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lf",&a[0][i]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
double t;scanf("%lf",&t);
a[i][j]=2.0*(t-a[0][j]);
a[i][n+1]+=t*t-a[0][j]*a[0][j];
}
gauss();
for(int i=1;i<=n;i++)
printf("%.3lf ",a[i][n+1]);
return 0;
}

BZOJ1013 JSOI2008 球形空间产生器sphere 【高斯消元】的更多相关文章

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

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

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

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

  3. lydsy1013: [JSOI2008]球形空间产生器sphere 高斯消元

    题链:http://www.lydsy.com/JudgeOnline/problem.php?id=1013 1013: [JSOI2008]球形空间产生器sphere 时间限制: 1 Sec  内 ...

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

    [BZOJ1013]球形空间产生器(高斯消元) 题面 Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标, ...

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

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

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

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

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

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

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

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

  9. 【BZOJ1013】[JSOI2008] 球形空间产生器(高斯消元)

    点此看题面 大致题意: 给定一个\(n\)维球体上的\(n+1\)个点,请你求出这个球体的圆心的位置. 列出方程 这一看就是一道解方程题. 我们可以设这个球体的圆心的位置为\((x_1,x_2,..x ...

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

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

随机推荐

  1. LA 3211 飞机调度(2—SAT)

    https://vjudge.net/problem/UVALive-3211 题意: 有n架飞机需要着陆,每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种,第i架飞机的早着陆时间 ...

  2. Spring MVC 实践笔记

    1.了解 Maven 的用法:http://spring.io/guides/gs/maven/ .这篇英文非常详细的演示了 Maven 的用法,在命令行下执行.注意,运行Maven的时候,Maven ...

  3. codeforces776D The Door Problem

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  4. JavaScript权威指南--语句

    知识要点 在javascript中,表达式是短语,那么语句(statement)就是整句或命令.表达式计算出一个值,但语句用来执行以使某件事发生. 1.表达式语句 具有副作用的表达式是JavaScri ...

  5. GTID主从 与 传统主从复制

    一.主从复制 1.)普通主从复制: 普通主从复制主要是基于二进制日志文件位置的复制,因此主必须启动二进制日志记录并建立唯一的服务器ID,复制组中的每个服务器都必须配置唯一的服务器ID.如果您省略ser ...

  6. PHP stream相关协议及上下文选项和参数归纳

    支持的协议和封装协议 PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen(). copy(). file_exists() 和 filesize() 的文件系统函数. 除了这些封装协 ...

  7. flask学习(九):模板渲染和参数传递

    一. 如何渲染模板 1. 模板放在templates文件夹下 2. 从flask中导入render_template函数 3. 在视图函数中,使用render_template函数,渲染模板 注意:只 ...

  8. Pycharm-professional-2017.2.3破解安装

    初次接触Python,大神推荐使用PyCharm IDE工具,作为小白初生牛犊不怕虎,上手就来最新版的,这也许不是最好的选择,但在以后慢慢琢磨深入之后,会选择适合自己的版本,现参考把安装过程分享出来. ...

  9. laravel5.5中查询构造器的使用

    //查询构造器新增数据: public function query1() { /* $bool=DB::table('student')->insert( ['name'=>'小李',' ...

  10. 【zznu-2174】

    题目链接 题目描述 给出一个圆C1的圆心和半径x1,y1,r1和另外一个圆C2的圆心为x2,y2(x,y均为整数 r为正整数  且绝对值不超1e8).已知两圆圆心距不超1e8,给出两者相交面积S(大于 ...