题目链接:

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

题目大意:

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

思路:

每两个可以构成一个n个变量的式子,可以构造出n个不同的式子,进行高斯消元求解。

高斯消元模板:

  1. typedef double Matrix[maxn][maxn];
  2. void gauss(Matrix A, int n)
  3. {
  4. for(int i = ; i < n; i++)
  5. {
  6. int r = i;
  7. for(int j = i + ; j < n; j++)
  8. if(fabs(A[j][i]) > fabs(A[r][i]))r = j;
  9. if(r != i)for(int j = ; j <= n; j++)swap(A[r][j], A[i][j]);
  10. for(int k = i + ; k < n; k++)
  11. {
  12. double f = A[k][i] / A[i][i];
  13. for(int j = i; j <= n; j++)A[k][j] -= f * A[i][j];
  14. }
  15. }
  16.  
  17. for(int i = n - ; i >= ; i--)
  18. {
  19. for(int j = i + ; j < n; j++)
  20. {
  21. A[i][n] -= A[j][n] * A[i][j];
  22. }
  23. A[i][n] /= A[i][i];
  24. }
  25. }
  1. #include<bits/stdc++.h>
  2. #define IOS ios::sync_with_stdio(false);//不可再使用scanf printf
  3. #define Max(a, b) ((a) > (b) ? (a) : (b))//禁用于函数,会超时
  4. #define Min(a, b) ((a) < (b) ? (a) : (b))
  5. #define Mem(a) memset(a, 0, sizeof(a))
  6. #define Dis(x, y, x1, y1) ((x - x1) * (x - x1) + (y - y1) * (y - y1))
  7. #define MID(l, r) ((l) + ((r) - (l)) / 2)
  8. #define lson ((o)<<1)
  9. #define rson ((o)<<1|1)
  10. #pragma comment(linker, "/STACK:102400000,102400000")//栈外挂
  11. using namespace std;
  12. inline int read()
  13. {
  14. int x=,f=;char ch=getchar();
  15. while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
  16. while (ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  17. return x*f;
  18. }
  19.  
  20. typedef long long ll;
  21. const int maxn = + ;
  22. const int mod = ;//const引用更快,宏定义也更快
  23. const int INF = 1e9;
  24. typedef double Matrix[maxn][maxn];
  25. double a[maxn][maxn];
  26. double tmp[maxn][maxn];
  27. void gauss(Matrix A, int n)
  28. {
  29. for(int i = ; i < n; i++)
  30. {
  31. int r = i;
  32. for(int j = i + ; j < n; j++)
  33. if(fabs(A[j][i]) > fabs(A[r][i]))r = j;
  34. if(r != i)for(int j = ; j <= n; j++)swap(A[r][j], A[i][j]);
  35. for(int k = i + ; k < n; k++)
  36. {
  37. double f = A[k][i] / A[i][i];
  38. for(int j = i; j <= n; j++)A[k][j] -= f * A[i][j];
  39. }
  40. }
  41.  
  42. for(int i = n - ; i >= ; i--)
  43. {
  44. for(int j = i + ; j < n; j++)
  45. {
  46. A[i][n] -= A[j][n] * A[i][j];
  47. }
  48. A[i][n] /= A[i][i];
  49. }
  50. }
  51. int main()
  52. {
  53. int n;
  54. scanf("%d", &n);
  55. for(int i = ; i <= n; i++)
  56. for(int j = ; j < n; j++)scanf("%lf", &a[i][j]);
  57. for(int i = ; i <= n; i++)
  58. {
  59. for(int j = ; j < n; j++)
  60. {
  61. tmp[i - ][n] -= a[][j] * a[][j];
  62. tmp[i - ][n] += a[i][j] * a[i][j];
  63. }
  64. for(int j = ; j < n; j++)
  65. tmp[i - ][j] = 2.0 * (a[i][j] - a[][j]);
  66. }
  67. gauss(tmp, n);
  68. for(int i = ; i < n; i++)
  69. {
  70. if(i == )printf("%.3lf", tmp[i][n]);
  71. else printf(" %.3lf", tmp[i][n]);
  72. }
  73. puts("");
  74. return ;
  75. }

BZOJ 1013 球形空间产生器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 高斯消元基础题

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

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

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

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

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

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

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

  6. BZOJ1013球形空间产生器sphere 高斯消元

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

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

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

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

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

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

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

随机推荐

  1. 跟着Nisy一起学习C语言

    编辑器是使用环境turboc的IDE,使用dos窗口中的edit作为编辑器,有点类似于vim:使用的是xp-sp3的虚拟机上的系统. Nisy说要有两种语言,脚本语言以及一个底层语言,比如现在我的py ...

  2. 利用三层判断sql数据库中编码是否已经存在(个人拙作,不喜勿喷)

    本人.Net新手,初学三层便想记录写笔记,以供像自己一样的新人去学习,大神就不用看啦 Dal层: /// 判断编码是否存在 /// </summary> /// <param nam ...

  3. IDEA搭建普通java项目

    初始化配置: 第一步:

  4. Eclipse3.2查找jre的问题

    前几天遇到一个问题,最开始电脑上使用的是解压的JDK(带jre),但是不能打开jar文件.所以从网上下载了一个jre1.8,然后问题来了,Eclipse打开就报错,弹出一个框,在eclipse的目录下 ...

  5. javascript实现深克隆的几种方法

    1)普通函数实现 function cloneObject(obj) { if (obj === null || typeof obj !== 'object') { return obj; } va ...

  6. Myeclipse下集成SVN插件

    一.下载SVN插件subclipse   下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240   在 ...

  7. JS实现图片放大镜

    将一个小图放置在一个小盒子里,当鼠标在小盒子里移动时,出现一个移动块,右侧出现一个大盒子,显示出小盒子中移动块所在区域的等比例放大的图片内容.需要实现的效果如下: 基本实现思路为:右侧大盒子为一个可视 ...

  8. Python 循环删除指定文件夹下所有的.longtian类型文件

    # -*- coding: utf-8 -*- import os #遍历文件夹删除文件 def traversing_dir(rootDir): #遍历根目录 for root,dirs,files ...

  9. 利用Swig转换C++代码为C#可用的代码

    详细的文件路径为:http://user.qzone.qq.com/1259374136/blog/1432887689 Swig学习教程 1.Swig的基本介绍 SWIG(Simplified Wr ...

  10. Android开发如何定制framework层服务

    刚刚跨完年,新年第一篇文章,那么今天将对Android开发framework中间层的服务定制使用作个总结.首先我们先导入Android平台源码framework层的代码到开发工具eclipse中,代码 ...