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个球 ...
随机推荐
- PHP libevent函数基本介绍
3.2 主要函数介绍 按照使用libevnet库顺序,看一下相关函数做什么操作. 3.2.1 event_init 调用event_base_new,初始化struct event_base对象 ...
- 使用Bind读取配置到C#的实例
在之前的一篇二级域名绑定的文章<.Net Core 二级域名绑定到指定的控制器>中,有一个小的地方是关于读取Json文件的配置信息的,当时是用了读取文件流的方式,一直以来觉得该方法太Low ...
- java开发中beancopy比较
在java应用开发过程中不可避免的会使用到对象copy属性赋值. 1.常用的beancopy工具 组织(包) 工具类 基本原理 其他 apache PropertyUtils java反射 B ...
- java反射调用api
cglib的fastmethod 简单示例: FastClass serviceFastClass = FastClass.create(Person.class); Person p = new P ...
- 【zzuli-2259】matrix
题目描述 在麦克雷的面前有N个数,以及一个R*C的矩阵.现在他的任务是从N个数中取出 R*C 个,并填入这个矩阵中.矩阵每一行的法值为本行最大值与最小值的差,而整个矩阵的法值为每一行的法值的最大值.现 ...
- centos静默安装oracle12c
配置系统和安装所需软件包 关闭selinux 临时关闭(不用重启) [root@SVR-3-125 ~]# setenforce 0 修改配置文件(需要重启): 将SELINUX=enforcing ...
- qml 与C++交互
最近一直在研究qml 怎么与C++交互,今天在网上看到一段代码忽然想明白了,哦!!!我在QT还只是一个小白,嘿嘿 首先在我们定义了CPP文件起名:比如:util.cpp,baidumusic.cpp ...
- 201621123005《Java程序设计》第四周学习总结
201621123005<Java程序设计>第四周学习总结 标签(空格分隔): 1.本章学习总结 1. 面向对象设计 1.1 写出你认为本周学习中比较重要的知识点关键词 继承.多态.覆盖. ...
- 随手写的一个检测php连接mysql的小脚本
最近偶然接触到一点点的php开发,要用到mysql数据库,由于mysql和php版本的关系,php5里面连接函数有mysql_connect(),mysqli_connect()两种,php7中又使用 ...
- zookeeper的c API 单线程与多线程问题 cli_st和cli_mt
同样的程序,在centos和ubuntu上都没有问题,在solaris上问题却多多,据说是solaris管理更加严格. zookeeper_init方法,在传入一个错误的host也能初始化出一个非空的 ...