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

只要列出方程组就能套高斯来解了。

显然距离相等,所以开不开平方都无所谓。

b表示圆心,可列

sigma((x[i][j]-b[j])^2)=sigma((x[i+1][j]-b[j])^2)

化简得

sigma(2*b[j]*(x[i+1][j]-x[i][j]))=sigma(x[i+1][j]^2-x[i][j]^2)

然后就得到n个等式,而且题目保证有解,就套高斯就行了。

第一次学高斯消元啊,其实就是在一个系数矩阵(叫做啥增广矩阵),每一次将第i行的下边的第i列的系数全部消除,最后得到一个倒三角矩阵,然后回代就是了。

也就是说

1 2 3

2 3 4

的矩阵,当前行在1,我们首先要消掉第二行的第一列,就相当于第一行*2(这个2就是2/1得来),然后第二行减去第一行。

就是消元嘛。。

在这里第i行i列的元素叫做主元素,而我们就是要将所有大于第i行的行将这一列的通过主元素消除。这里需要注意,主元素不要为0,且不要很小,要不然会严重影响精度(就是如果很小的话无法体现分母了)。那么我们在每一次消元时,要找第i列最大的,然后和当前行交换,这样能得到最大的主元素。

高斯中判断无解和无限解的问题还待研究。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << (#x) << " = " << (x) << endl
#define printarr2(a, b, c) for1(_, 1, b) { for1(__, 1, c) cout << a[_][__]; cout << endl; }
#define printarr1(a, b) for1(_, 1, b) cout << a[_] << '\t'; cout << endl
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=15;
double A[N][N], a[N][N];
int n;void gauss() {for1(i, 1, n-1) {int pos=i;for1(j, i+1, n) if(abs(A[pos][i])<abs(A[j][i])) pos=j;for1(j, 1, n+1) swap(A[i][j], A[pos][j]);for1(j, i+1, n) {double y=A[j][i]/A[i][i];for1(k, i, n+1) A[j][k]-=y*A[i][k];}}for3(i, n, 1) {for1(j, i+1, n) A[i][n+1]-=A[j][n+1]*A[i][j];A[i][n+1]/=A[i][i];}
}
int main() {read(n);for1(i, 1, n+1) for1(j, 1, n) scanf("%lf", &a[i][j]);for1(i, 1, n) {for1(j, 1, n) A[i][j]=2*(a[i+1][j]-a[i][j]);for1(j, 1, n) A[i][n+1]+=a[i+1][j]*a[i+1][j]-a[i][j]*a[i][j];}gauss();for1(i, 1, n-1) printf("%.3lf ", A[i][n+1]); printf("%.3lf\n", A[n][n+1]);return 0;
}

  


Description

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

Input

第一行是一个整数,n。接下来的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

数据规模:

对于40%的数据,1<=n<=3

对于100%的数据,1<=n<=10

提示:给出两个定义:

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]球形空间产生器sphere(高斯消元)相关推荐

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

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

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

    可以得到N条N元一次方程, 高斯消元就OK了..时间复杂度O(N3) ----------------------------------------------------------------- ...

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

    题目大意:给定n维空间下的n+1个点,求这n个点所在的球面的球心 以前尝试了非常久的模拟退火0.0 至今仍未AC 0.0 今天挖粪涂墙怒学了高斯消元-- 我们设球心为X(x1,x2,...,xn) 如 ...

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

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 5598  Solved: 2943 [Su ...

  5. luogu P4035 [JSOI2008]球形空间产生器(高斯消元 / 模拟退火)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 数据范围只开到了10,而且是经典的力学结构,所以我们可以用模拟退火,可以做一下 nnn 维的正交分解h ...

  6. 【BZOJ】1013 [JSOI2008]球形空间产生器sphere

    [算法]高斯消元 [题解] 建矩阵; for i 找到同列绝对值最大数字; 交换; for k(行) j(列)(倒序)   除法; for i(倒序) for j 减去已知元素 除到右边; #incl ...

  7. BZOJ 1013 球形空间产生器(高斯消元)

    时间限制: 1 Sec  内存限制: 128 MB 提交: 11  解决: 7 [提交] [状态] [命题人:admin] 题目描述 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被 ...

  8. bzoj1013,luogu4035-[JSOI2008]球形空间产生器【高斯消元】

    正题 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3534 https://www.luogu.org/problem/P4035 题 ...

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

    题目链接 HDU3571 //824kb 40ms //HDU3571弱化版 跟那个一比这个太水了,练模板吧. //列出$n+1$个二次方程后两两相减,就都是一次方程了. #include <c ...

最新文章

  1. Java开发必须掌握的线上问题排查命令
  2. 【干货】极简体验+免费真的万能嘛?北森Saas第一坑:免费
  3. python的jsonpath_python 提取json数据的jsonPath介绍及简单使用
  4. 独家!支付宝小程序技术架构全解析
  5. [Unity菜鸟] Time
  6. java cpu过高排查_涨薪秘籍:JAVA项目排查cpu负载过高
  7. [vue] 你了解什么是函数式组件吗?
  8. puppet成长日记二 Package资源详细介绍及案例分析
  9. ai电磁组属于什么组_飞思卡尔智能车电磁组分区算法介绍
  10. Entity Framework 4 in Action读书笔记——第六章:理解实体的生命周期(一)
  11. 【CCCC】L2-004 这是二叉搜索树吗? (25分),二叉搜索树前序遍历
  12. Windows系统、下的MySQL、版本升级、实操
  13. java中compar_1.java中Comparor与Comparable的问题
  14. 安卓手机解锁密码忘了如何解锁
  15. 北京智能机器人为游客指路;日本研发出可识别背影的人工智能
  16. Excel合并表格之vba
  17. java二进制保存图片_Java中如何把图片转换成二进制流
  18. 【R语言】常用基本函数
  19. 用WinSCP登录路由器并传入文件及改文件权限
  20. Eclipse软件使用教程

热门文章

  1. left join后边跟on...and 和where...and的区别
  2. alexa api php,php 读取 alexa信息
  3. 第一节 Java语言发展史
  4. 多线程的那点儿事(之数据同步)
  5. 推荐几个超会整活儿的Go公众号
  6. 【安全牛学习笔记】抓包嗅探
  7. SVN-您的主机中的软件中止了一个已建立的连接
  8. 暴力/图论 hihoCoder 1179 永恒游戏
  9. mac中一一些常用的命令
  10. DevExpress控件XtraGrid的Master-Detail用法 z