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个球 ...
随机推荐
- linux 进程在后台执行
把任务放到后台用 & 和 Ctrl+z 让后台任务从停止状态转为运行状态用 bg %N 把后台任务调回到前台用 fg %N 查看所有任务用jobs https://www.cnblogs.co ...
- html和JavaScript,用户点击浏览器后退按钮,或者返回上一步自动刷新方式
浏览器用户返回上一步,自动刷新 方式一. <input type="hidden" id="refreshed" value="no" ...
- springboot解决开发环境和生产环境不一样的配置问题
代码: application-dev.yml server: port: gril: cupSize: B age: application-prod.yml server: port: gril: ...
- 从源码角度分析 Kotlin by lazy 的实现
by lazy 的作用 延迟属性(lazy properties) 是 Kotlin 标准库中的标准委托之一,可以通过 by lazy 来实现. 其中,lazy() 是一个函数,可以接受一个 Lamb ...
- rdlc报表出现多余空白页面
1.RDLC报表设计好后,在ReportViewer预览报表时,页数都正常:但在切换为整页模式时,常造成多了不少空白页出来.第一时间觉得不可思议,在ReportViewer看来正常,怎可能在整页预览时 ...
- linux exec和xargs的区别
-exec 1.参数是一个一个传递的,传递一个参数执行一次,效率低 2.文件名有空格等特殊字符也能处理 -xargs 1.一次将参数传给命令,可以使用-n控制参数个数 ...
- CodeForces 55D Beautiful numbers (SPOJ JZPEXT 数位DP)
题意 求[X,Y]区间内能被其各位数(除0)均整除的数的个数. CF 55D 有些时候因为问题的一些"整体性"而导致在按位统计的过程中不能顺便计算出某些量,所以只能在枚举到最后一位 ...
- linux---进程,(rpm,yum)软件包
3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大小为5G fdisk -l fdisk /dev/sdb p 查看 n 新建 p 主分区 ...
- laravel中修改默认时区
在config文件夹下app.php中找到timezone,有RTC改成PRC
- ZOJ 3696 Alien's Organ(泊松定理,期望值)
Alien's Organ Time Limit: 2 Seconds Memory Limit: 65536 KB There's an alien whose name is Marja ...