描述


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

n维空间,给出球上n+1个点的n维坐标,求球心坐标.

提示:给出两个定义:1、 球心:到球面上任意一点距离都相等的点。2、 距离:设两个n为空间上的点A, B

的坐标为(a1, a2, …, an), (b1, b2, …, bn),则AB的距离定义为:dist = sqrt( (a1-b1)^2 + (a2-b2)^2 +

… + (an-bn)^2 )

分析


对于前n个点,第i个点到球心的距离与第i+1个相同,可以列出形式如下的n个方程(x表示球心):

$$\sum_{j=1}^n(a[i][j]^2-a[x][j]^2)=\sum_{j=1}^n(a[i+1][j]^2-a[x][j]^2)$$

我们把它展开,化简,得到:

$$\sum_{j=1}^n2a[x][j](a[i+1][j]-a[i][j])=\sum_{j=1}^n(a[i+1][j]^2-a[i][j]^2)$$

如上的方程中\(a[i][j]与a[i+1][j]\)都是已知的,所以是一个n元一次方程.我们可以列出来n个,问题就转化为了求一个线性方程组的解.

对于这样的问题,我们高斯消元法.其实和我们平常解方程组消元差不多,我大概说一下思路.

我们把方程组列出来,从1~n标号.

先让2~n的方程都加上一定倍数的1号方程,把它们的1号元消去.

再让3~n的方程都加上一定倍数的2号方程,把他们的2号元消去.

...

最后发现方程组变成了一个三角形的样子.n号方程只有一个未知数即n号元.接下来从下到上代入求解.

解出n号元代入n-1号方程,求出n-1号元.

解出n-1号元代入n-2号方程,求出n-2号元.

...

这样就OK了.

但是在实现的时候我们通常用什么什么主元消元法...

意思就是在消去i号元的时候,由于i~n号方程是等价的,所以我们不一定要选i号方程,可以选其他的.

那我们选哪一个呢?我们选i号元的系数绝对值最大的那一个.

这样的话其他方程都会加上一个较小倍数的选中的方程,这样可以减少乘法带来的误差...

差不多就是这样,这东西不复杂,自己感受一下~

 #include <bits/stdc++.h>
using namespace std; const int maxn=+;
int n;
double a[maxn][maxn],A[maxn][maxn];
void gause(){
for(int i=;i<=n;i++){
int t=i;
for(int j=i+;j<=n;j++)if(fabs(A[j][i])>fabs(A[t][i])) t=j;
if(t!=i) for(int j=;j<=n+;j++) swap(A[i][j],A[t][j]);
for(int j=i+;j<=n;j++){
double x=A[j][i]/A[i][i];
for(int k=i;k<=n+;k++) A[j][k]-=x*A[i][k];
}
}
for(int i=n;i>=;i--){
for(int j=i+;j<=n;j++) A[i][n+]-=A[j][n+]*A[i][j];
A[i][n+]/=A[i][i];
}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n+;i++)for(int j=;j<=n;j++) scanf("%lf",&a[i][j]);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++) A[i][j]=*(a[i+][j]-a[i][j]);
for(int j=;j<=n;j++) A[i][n+]+=a[i+][j]*a[i+][j]-a[i][j]*a[i][j];
}
gause();
printf("%.3lf",A[][n+]);
for(int i=;i<=n;i++) printf(" %.3lf",A[i][n+]);
return ;
}

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

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 4166  Solved: 2191
[Submit][Status][Discuss]

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 )

Source

BZOJ_1013_[JSOI2008]_球形空间产生器_(高斯消元)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    传送门 设球心的坐标为未知量 用最后一个点来表示球面到球心的距离,那么它和前n个式子相等 移项乱搞 最后高斯消元 #include <cmath> #include <cstdio& ...

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

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

随机推荐

  1. [DLL] Dynamic link library (dll) 的编写和使用教程

    前一阵子,项目里需要导出一个DLL,但是导出之后输出一直不怎么对,改了半天才算改对...读了一些DLL教程,感觉之后要把现在的代码导出,应该还要花不少功夫...下面教程参照我读的3个教程写成,所以内容 ...

  2. 第二章 Qt常用工具的介绍

    第二章 Qt常用工具的介绍 (1)No.1 qmake 相信编写过Makefile的开发人员,随着工程中源码的级数递增和以类型.功能.模块组织源码的子目录的增多,都不愿意重复机械地手工编写这个工程管理 ...

  3. mysql---union和左连接的两倒面试题

    第一道: 思路:无非是将hid与gid与t表中的tname关联起来.实质上是三表关联(m,t,t) 先将hid与tname关联起来,运用左连接 再将结果集与t表中的tname关联起来,使得gid与tn ...

  4. .net Remoting 的工作原理是什么?

    webservice和.net remoting都是用来通信的框架,它们最大的优点是可以像调用本地对象一样调用远程对象 区别:1.webservice是用的应用层协议http封装的,所以它可以被很多其 ...

  5. Python学习_Python 3.X版本导入httplib模块报ImportError解决方案

    之前用Python 2.7版本的httplib做接口测试时,运行代码都是正常的, 最近开始用Python 3.3之后,再去看以前的代码,发现import httplib出现错误:Unresolved ...

  6. 软键盘android:windowSoftInputMode属性详解

    android:windowSoftInputModeactivity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性.这个属性能影响两件事情:[一]当有焦 ...

  7. Android openGL ES 2.0里Surfaceview背景透明

    surfaceview的黑色背景会挡住其父的背景,现在把surfaceview的背景设为透明,既可以看到所绘的3D物体,又可以看到背景. 在onSurfaceCreated里,调用GLES20.glC ...

  8. poj 2828 Buy Tickets (线段树(排队插入后输出序列))

    http://poj.org/problem?id=2828 Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissio ...

  9. python里面的几个编码函数

    时不时的被编码折腾一下 >>> print urllib.quote('中国') %E4%B8%AD%E5%9B%BD >>> s = '%E4%B8%AD%E5% ...

  10. 执行config文件时,config.log中报错xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does not exist, use xcode-select to change

    执行 sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer 即可解决.