BZOJ1013球形空间产生器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的坐标为\((a_1, a_2 .. a_n), (b_1, b_2 .. b_n)\), 则AB的距离定义为:\(dist = \sqrt{(a_1 - b_1) ^ 2 + (a_2 - b_2) ^ 2 + .. + (a_n - b_n) ^ 2}\)
Solution
這題很尷尬的一點就是方程帶有二次項, 而且半徑也尚不能確定.
然而又發現, 這題只有\(n\)個未知數, 但是給了\(n + 1\)個點的座標. 因此, 這一題可以通過作差的方式把二次项降到一次項. 具體來說, 就是:
原式:
\]
\]
作差後:
\]
即
\]
因此\(n - 1\)個座標得到\(n\)個線性方程組, 可以用高斯消元發解決.
至於關於高斯消元發的具體步驟, 直接看代碼就好了.
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 1 << 4;
double f[N];
double equa[N][N];
inline double sqr(double x)
{
return x * x;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("BZOJ1013.in", "r", stdin);
freopen("BZOJ1013.out", "w", stdout);
#endif
int n;
scanf("%d", &n);
for(int i = 0; i < n; i ++)
scanf("%lf", &f[i]);
memset(equa, 0, sizeof(equa));
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j ++)
{
double x;
scanf("%lf", &x);
equa[i][j] = 2 * (x - f[j]);
equa[i][n] += sqr(x) - sqr(f[j]);
}
for(int i = 0; i < n; i ++)
{
double mx = - 1.0;
int ID;
for(int j = i; j < n; j ++)
if(fabs(equa[j][i]) > mx)
mx = fabs(equa[j][i]), ID = j;
swap(equa[ID], equa[i]);
for(int j = 0; j < n; j ++)
if(i != j)
for(int k = n; ~ k; k --)
equa[j][k] -= equa[j][i] / equa[i][i] * equa[i][k];
}
for(int i = 0; i < n - 1; i ++)
printf("%.3lf ", equa[i][n] / equa[i][i]);
printf("%.3lf\n", equa[n - 1][n] / equa[n - 1][n - 1]);
}
BZOJ1013球形空间产生器sphere 高斯消元的更多相关文章
- 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][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 内 ...
- BZOJ 1013 球形空间产生器sphere 高斯消元
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1013 题目大意: 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困 ...
- 【BZOJ 1013】【JSOI2008】球形空间产生器sphere 高斯消元基础题
最基础的高斯消元了,然而我把j打成i连WA连跪,考场上再犯这种错误就真的得滚粗了. #include<cmath> #include<cstdio> #include<c ...
- 【BZOJ1013】球形空间产生器(高斯消元)
[BZOJ1013]球形空间产生器(高斯消元) 题面 Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标, ...
- 【BZOJ1013】[JSOI2008] 球形空间产生器(高斯消元)
点此看题面 大致题意: 给定一个\(n\)维球体上的\(n+1\)个点,请你求出这个球体的圆心的位置. 列出方程 这一看就是一道解方程题. 我们可以设这个球体的圆心的位置为\((x_1,x_2,..x ...
随机推荐
- 《鸟哥的Linux私房菜》学习笔记(1)——文件与目录
在Linux中,任何设备都是文件,不仅如此,连数据通信的接口也有专门的文件负责.可以说,一切皆文件,目录也是一种文件,是路径映射.因此,文件系统是Linux的基础. 一.文件与目录管理命令 1.ls( ...
- android:exported属性
这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互.如果设置为true,则能够被调用或交互,否则不能.设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定 ...
- 大数据学习——sparkSql对接hive
1. 安装mysql 2. 上传.解压.重命名 2.1. 上传 在随便一台有hadoop环境的机器上上传安装文件 su - hadoop rz –y 2.2. 解压 解压缩:apache- ...
- PostgreSQL order by 排序问题
默认的排序为order by 字段名, 如果该字段不允许为空的情况下可以这样操作, 但是当字段允许为null时,order by 字段名的方式会导致: 升序时(asc): 会从最小值开始升序,最后面接 ...
- 九度oj 题目1466:排列与二进制
题目描述: 在组合数学中,我们学过排列数.从n个不同元素中取出m(m<=n)个元素的所有排列的个数,叫做从n中取m的排列数,记为p(n, m).具体计算方法为p(n, m)=n(n-1)(n-2 ...
- 许式伟看 Facebook 发币(上): 区块链, 比特币与 Libra 币
你好,我是七牛云许式伟. Facebook(脸书)于6月18日发布了其加密数字货币项目白皮书.该数字货币被命名为 Libra(天秤座),象征着平衡与公正.此前,BBC 报道说这个数字货币叫 Globa ...
- 本博客由CSDN迁移而来,以前的博文可能显示不正常
如题,原博客地址 http://blog.csdn.net/vicjiao 或点击右侧友链
- pytesseract的使用
首先,先安装好Tesseract软件,pytesseract模块 问题 1 :FileNotFoundError: [WinError 2] 系统找不到指定的文件. 加上这行代码 pytesserac ...
- fullpage在vue单页面当中使用会出现的问题以及解决办法
在 vue 单页面当中发现fullpage会报错,报错信息大概意思为,fullpage不允许初始化多次. 解决办法,在使用fullpage的组件跳转路由进入销毁组件之前的生命周期的时候对fullpag ...
- 使用JWT实现Token认证
为什么使用JWT? 随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,然后通过token去取redis中的缓存的用 ...