球形空间产生器sphere HYSBZ - 1013 (高斯消元)

原题地址

题意

给出n维的球上的n个点,问原球体球心。

提示

n维球体上两点距离公式\(dist = \sqrt{ (a1-b1)^2 + (a2-b2)^2 + … + (an-bn)^2 }\)

解法

\((x1-x0)^2\) --1

\((x2-x0)^2\) --2

2-1得

\((x2-x0)^2-(x1-x0)^2=0\)

-->

\(2(x2-x1)x0=(x2-x1)^2\)

类似可得

\(2(x2-x1)x0+2(y2-y1)y0+....=(x2-x1)^2+(y2-y1)^2....\)

n+1个点,可以得到n的方程,由此可以解出n个变元

参考代码一

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <iostream>
  5. using namespace std;
  6. const int N = 40;
  7. int equ,var;
  8. double a[N][N];
  9. double x[N];
  10. double free_x[N];
  11. double c[15][15];
  12. int free_num;
  13. const double eps=1e-9;
  14. double Gauss()
  15. {
  16. int row,col,max_r;
  17. int i,j;
  18. row = col = 0;
  19. while(row < equ && col < var)
  20. {
  21. max_r = row;
  22. for(i = row+1; i < equ; i++)
  23. if(fabs(a[i][col])-fabs(a[max_r][col]) > eps)
  24. max_r = i;
  25. if(max_r != row)
  26. {
  27. for(j = col; j <= var; j++)
  28. swap(a[row][j],a[max_r][j]);
  29. }
  30. if(fabs(a[row][col]) < eps)
  31. {
  32. col++;
  33. continue;
  34. }
  35. for(i = row+1; i < equ; i++)
  36. {
  37. if(fabs(a[i][col]) > eps)
  38. {
  39. double t = a[i][col]/a[row][col];
  40. a[i][col] = 0.0;
  41. for(j = col+1; j <= var; j++)
  42. a[i][j] -= a[row][j]*t;
  43. }
  44. }
  45. row++;
  46. col++;
  47. }
  48. //唯一解,回代
  49. for(int i=equ-1;i>=0;i--)
  50. {
  51. x[i]=a[i][var];
  52. for(int j=i+1;j<var;j++) x[i]-=a[i][j]*x[j];
  53. x[i]/=a[i][i];
  54. }
  55. return 0;
  56. }
  57. void init()
  58. {
  59. memset(a,0,sizeof(a));
  60. memset(x,0,sizeof(x));
  61. }
  62. int main()
  63. {
  64. int n;
  65. while(~scanf("%d",&n))
  66. {
  67. for(int i=0;i<=n;i++)
  68. {
  69. for(int j=0;j<n;j++)
  70. {
  71. scanf("%lf",&c[i][j]);
  72. }
  73. }
  74. for(int i=1;i<=n;i++)
  75. {
  76. for(int j=0;j<n;j++)
  77. {
  78. a[i-1][j]=2*(c[i][j]-c[i-1][j]);
  79. }
  80. a[i-1][n]=0;
  81. for(int j=0;j<n;j++) a[i-1][n]+=(c[i][j]+c[i-1][j])*(c[i][j]-c[i-1][j]);
  82. }
  83. equ=n;var=n;
  84. Gauss();
  85. for(int i=0;i<n;i++)
  86. {
  87. if(i) printf(" ");
  88. printf("%.3f",x[i]);
  89. }
  90. }
  91. return 0;
  92. }

参考代码二

  1. /**************************************************************
  2. Problem: 1013
  3. User: yueguang12
  4. Language: C++
  5. Result: Accepted
  6. Time:0 ms
  7. Memory:1296 kb
  8. ****************************************************************/
  9. #include<queue>
  10. #include<cmath>
  11. #include<cstdio>
  12. #include<cstring>
  13. #include<cstdlib>
  14. #include<iostream>
  15. #include<algorithm>
  16. #define ll long long
  17. #define inf 30005
  18. using namespace std;
  19. int read(){
  20. int x=0,f=1;char ch=getchar();
  21. while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
  22. while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
  23. return x*f;
  24. }
  25. void Out(ll a){
  26. if(a<0) putchar('-'),a=-a;
  27. if(a>=10) Out(a/10);
  28. putchar(a%10+'0');
  29. }
  30. const int N=15;
  31. double a[N][N];
  32. double c[15][15];
  33. const double eps=1e-9;
  34. int n;
  35. bool Gauss(){
  36. int now=1,to;double t;
  37. for(int i=1;i<=n;i++){
  38. for(to=now;to<=n;to++)if(fabs(a[to][i])>eps)break;
  39. if(to>n)continue;
  40. if(to!=now)for(int j=1;j<=n+1;j++)
  41. swap(a[to][j],a[now][j]);
  42. t=a[now][i];
  43. for(int j=1;j<=n+1;j++)a[now][j]/=t;
  44. for(int j=1;j<=n;j++) if(j!=now){
  45. t=a[j][i];
  46. for(int k=1;k<=n+1;k++)
  47. a[j][k]-=t*a[now][k];
  48. }
  49. now++;
  50. }
  51. for(int i=now;i<=n;i++)
  52. if(fabs(a[i][n+1])>eps) return 0;
  53. return 1;
  54. }
  55. void Build(){
  56. for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)
  57. {
  58. a[i][j]=2*(c[i][j]-c[i-1][j]);
  59. a[i][n+1]+=(c[i][j]+c[i-1][j])*(c[i][j]-c[i-1][j]);
  60. }
  61. }
  62. int main(){
  63. n=read();
  64. for(int i=0;i<=n;i++) for(int j=1;j<=n;j++)
  65. scanf("%lf",&c[i][j]);
  66. Build();
  67. Gauss();
  68. for(int i=1;i<=n;i++){
  69. if(i>1) printf(" ");
  70. printf("%.3f",a[i][n+1]);
  71. }
  72. puts("");
  73. return 0;
  74. }

【BZOJ 1013】球形空间产生器sphere(高斯消元)的更多相关文章

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

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1013 题目大意: 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困 ...

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

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

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

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

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

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

  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. BZOJ1013球形空间产生器sphere 高斯消元

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

  8. bzoj1013球形空间产生器sphere 高斯消元(有系统差的写法

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

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

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

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

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1013 n维空间,给出球上n+1个点的n维坐标,求球心坐标. 提示:给出两个定义:1. 球心:到 ...

随机推荐

  1. POJ1808 平方(二次)同余方程

    POJ1808  给定一个方程 x*x==a(mod p) 其中p为质数 判断是否有解 程序中 MOD_sqr()返回整数解 无解返回-1 数学证明略 #include<iostream> ...

  2. RDA 多屏参流程

    一.RDA MAKEFILE的本地变量 在介绍多屏参之前,先看一下./code/env.conf的包含过程,通过./code/Makefile.project加载,env.conf中所有的变量,都变为 ...

  3. CSS3 动画 @keyframes

    通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片.Flash 以及 JavaScript. 如下动画,常用于手机端,提示用户往下拖动的渐隐渐出效果. Demo 关键CSS代码 1. 给 ...

  4. deepin 安装maven

    1.在官网 http://maven.apache.org/download.cgi 下载mvn包   2.新建mvn目录 mkdir  /usr/local/mvn 把压缩包解压到mvn目录下面 修 ...

  5. Python 模拟postman上传文件

    最近工作需求:写的程序要用到python模拟postman操作,基于flask框架 代码很简单 但是百度一半天: import requests files = {'skFile': open(r&q ...

  6. 所有版本chrome、chromedriver、firefox下载链接

    1. 所有版本chrome下载 是不是很难找到老版本的chrome?博主收集了几个下载chrome老版本的网站,其中哪个下载的是原版的就不得而知了. http://www.slimjet.com/ch ...

  7. apache-storm-0.9.6.tar.gz的集群搭建(3节点)(图文详解)

    不多说,直接上干货! Storm的版本选取 我这里,是选用apache-storm-0.9.6.tar.gz Storm的本地模式安装 本地模式在一个进程里面模拟一个storm集群的所有功能, 这对开 ...

  8. Myeclipse2014安装&破解激活

    市场上很多JavaWeb的IDE比如Idea(听说用好开发效率会很高),eclipse(插件丰富还免费),但是对于初学者还是为了提高学习的效率(Myeclipse创建web项目的时候可以自动生成一些配 ...

  9. c++利用jsoncpp libcurl 构造http 包(原)

    我们手游要接入uc九游进行测试,要用http向uc那边的sdk 服务器post  json数据. 虽然他们提供了php,java还有c#的服务端demo,但是我们服务器是C++写的,我实在不想中间再转 ...

  10. MySQL与MongoDB的操作对比

    MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方 ...