BZOJ1013 JSOI2008 球形空间产生器sphere 【高斯消元】
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 【高斯消元】的更多相关文章
- [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...
- BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元
1013: [JSOI2008]球形空间产生器sphere Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/Judg ...
- lydsy1013: [JSOI2008]球形空间产生器sphere 高斯消元
题链:http://www.lydsy.com/JudgeOnline/problem.php?id=1013 1013: [JSOI2008]球形空间产生器sphere 时间限制: 1 Sec 内 ...
- 【BZOJ1013】球形空间产生器(高斯消元)
[BZOJ1013]球形空间产生器(高斯消元) 题面 Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标, ...
- BZOJ-1013 球形空间产生器sphere 高斯消元+数论推公式
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3662 Solved: 1910 [Subm ...
- BZOJ1013球形空间产生器sphere 高斯消元
@[高斯消元] Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球 ...
- bzoj1013球形空间产生器sphere 高斯消元(有系统差的写法
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁 ...
- 【BZOJ 1013】【JSOI2008】球形空间产生器sphere 高斯消元基础题
最基础的高斯消元了,然而我把j打成i连WA连跪,考场上再犯这种错误就真的得滚粗了. #include<cmath> #include<cstdio> #include<c ...
- 【BZOJ1013】[JSOI2008] 球形空间产生器(高斯消元)
点此看题面 大致题意: 给定一个\(n\)维球体上的\(n+1\)个点,请你求出这个球体的圆心的位置. 列出方程 这一看就是一道解方程题. 我们可以设这个球体的圆心的位置为\((x_1,x_2,..x ...
- [JSOI2008]球形空间产生器 (高斯消元)
[JSOI2008]球形空间产生器 \(solution:\) 非常明显的一道高斯消元.给了你n+1个球上的位置,我们知道球上任何一点到球心的距离是相等,所以我们 可以利用这一个性质.我们用n+1个球 ...
随机推荐
- HttpServletResponse response详解
//内容类型和编码格式可以被调用多次,最后一次将覆盖之前的设置 //内容类型和编码格式必须在 //设置内容类型getWriter和getOutputStream方法之前调用,否则不起作用 //若未设置 ...
- Codeforces Round #360 (Div. 2) D. Remainders Game
D. Remainders Game time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- RK61 Keyboard Use
~ 打法: FN+shift+Esc / ? Alt Files Ctral <=> 上 下 左 右 打法:FN+shift 切换 解锁键盘 打法:FN+win 蓝牙连接 打法:FN+ ...
- linux中的&&和&,|和||
在linux中,&和&&,|和||介绍如下: & 表示任务在后台执行,如要在后台运行redis-server,则有 python a.py & && ...
- HTML5 history API,创造更好的浏览体验
HTML5 history API有什么用呢? 从Ajax翻页的问题说起 请想象你正在看一个视频下面的评论,在翻到十几页的时候,你发现一个写得稍长,但非常有趣的评论.正当你想要停下滚轮细看的时候,手残 ...
- 织梦dedecms获取当前内容页栏目id号的方法
一,可在内容模板中直接这样写{dede:field.typeid/} 可显示本栏目的id 二,也可这样写 {dede:type}[field:ID /]{/dede:type} . 三, 如果是在{ ...
- phalcon: 项目地址/P(.*), 项目地址/Pbaidu 与 路由
phalcon: 项目地址/P(.*) 与 路由 有一个项目地址:因客户渠道不同,带的参数也不相同.当时想到的是伪静态规则,但是发现自己没有那么强大.该走phalcon路由规则,地址如下: www.x ...
- 项目使用文档管理:MediaWiki安装及使用入门
MediaWiki是著名的开源wiki引擎,全球最大的wiki项目维基百科(百科词条协作系统)是使用MediaWiki的成功范例,MediaWiki的最大作用在于对知识的归档,可用于构建企业/个人知识 ...
- android 命令行签名apk文件
签名apk 1.将apk格式改为zip格式包,然后删除原来apk里面的META-INF文件夹,之后改回apk文件格式 2.cmd命令行: jarsigner -verbose -keystore C: ...
- LabVIEW之安装队列工具包AMC安装问题解决
LabVIEW之安装队列工具包AMC安装问题解决--VIPM无法连接LabVIEW 彭会锋 参考资料: http://www.labviewpro.net/forum_post_detail.php? ...