题目描述

  有一个\(n\)维空间中的球,告诉你球面上\(n+1\)个点的坐标,求球心的坐标。

  \(n\leq 10\)

题解

  设\(a_{i,j}\)为第\(i\)个点的第\(j\)维坐标,\(i=0\)代表球心。

  假设\(n=2\):

\[\begin{align}
\sum_{i=1}^n{(a_{0,i}-a_{1,i})}^2&=\sum_{i=1}^n{(a_{0,i}-a_{2,i})}^2\\
\sum_{i=1}^na_{0,j}^2-2\sum_{i=1}^na_{0,i}a_{1,i}+\sum_{i=1}^na_{1,i}^2&=\sum_{i=1}^na_{0,j}^2-2\sum_{i=1}^na_{0,i}a_{2,i}+\sum_{i=1}^na_{2,i}^2\\
2\sum_{i=1}^na_{0,i}a_{1,i}-\sum_{i=1}^na_{1,i}^2&=2\sum_{i=1}^na_{0,i}a_{2,i}-\sum_{i=1}^na_{2,i}^2\\
\sum_{i=1}^n2(a_{1,i}-a_{2,i})a_{0,i}-\sum_{i=1}^n(a_{2,i}^2-a_{1,i}^2)&=0
\end{align}
\]

  一共给你了\(n+1\)个点,可以构造出\(n\)个方程,可以用高斯消元解出\(n\)个未知数\(a_{0,i},\ldots ,a_{0,n}\)

  时间复杂度:\(O(n^3)\)

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
#include<cmath>
#include<functional>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
void sort(int &a,int &b)
{
if(a>b)
swap(a,b);
}
void open(const char *s)
{
#ifndef ONLINE_JUDGE
char str[100];
sprintf(str,"%s.in",s);
freopen(str,"r",stdin);
sprintf(str,"%s.out",s);
freopen(str,"w",stdout);
#endif
}
int rd()
{
int s=0,c;
while((c=getchar())<'0'||c>'9');
do
{
s=s*10+c-'0';
}
while((c=getchar())>='0'&&c<='9');
return s;
}
int upmin(int &a,int b)
{
if(b<a)
{
a=b;
return 1;
}
return 0;
}
int upmax(int &a,int b)
{
if(b>a)
{
a=b;
return 1;
}
return 0;
}
double a[20][20];
double c[20][20];
int main()
{
open("bzoj1013");
int n;
scanf("%d",&n);
int i,j;
for(i=1;i<=n+1;i++)
for(j=1;j<=n;j++)
scanf("%lf",&a[i][j]);
for(i=1;i<=n;i++)
for(j=1;j<=n+1;j++)
c[i][j]=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
c[i][j]+=2*(a[1][j]-a[i+1][j]);
c[i][n+1]-=a[i+1][j]*a[i+1][j]-a[1][j]*a[1][j];
}
int k;
double v;
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
if(fabs(c[j][i])>1e-9)
break;
if(j!=i)
for(k=i;k<=n+1;k++)
swap(c[i][k],c[j][k]);
v=1/c[i][i];
for(j=i;j<=n+1;j++)
c[i][j]*=v;
for(j=1;j<=n;j++)
if(j!=i&&fabs(c[j][i])>1e-9)
{
v=c[j][i];
for(k=i;k<=n+1;k++)
c[j][k]-=c[i][k]*v;
}
}
for(i=1;i<=n;i++)
{
printf("%.3f",c[i][n+1]);
if(i!=n)
putchar(' ');
}
return 0;
}

【BZOJ1013】【JSOI2008】球形空间产生器 高斯消元的更多相关文章

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

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

  2. LG4035/BZOJ1013 「JSOI2008」球形空间产生器 高斯消元

    问题描述 LG4035 BZOJ1013 题解 设答案为\((p_1,p_2,p_3,...,p_n)\) 因为是一个球体,令其半径为\(r\),则有 \[\sum_{i=1}^{n}{(a_i-p_ ...

  3. BZOJ1013 JSOI2008 球形空间产生器sphere 【高斯消元】

    BZOJ1013 JSOI2008 球形空间产生器sphere Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点 ...

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

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4846  Solved: 2525[Subm ...

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

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

  6. bzoj千题计划104:bzoj1013: [JSOI2008]球形空间产生器sphere

    http://www.lydsy.com/JudgeOnline/problem.php?id=1013 设球心(x1,x2,x3……) 已知点的坐标为t[i][j] 那么 对于每个i满足 Σ (t[ ...

  7. bzoj1013 [JSOI2008]球形空间产生器

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

  8. BZOJ1013: [JSOI2008]球形空间产生器sphere

    传送门 高斯消元练习. 模板: void Guass(){ int waited; up(i,1,N){ waited=i; up(j,i+1,N)if(fabs(M[j][i])>fabs(M ...

  9. BZOJ1013 [JSOI2008]球形空间产生器sphere[高消]

    数论进度开的好慢啊.我整天做的都是什么鬼题啊. 简单的高消题,用一个式子把另外$n$个有二次项和距离的式子全消掉就行了. #include<iostream> #include<cs ...

随机推荐

  1. 二十二:制作app的时候超出部分不能滑动

    给需要滑动的区域写以下样式(父级是浏览器) position: absolute; left: 0; right: 0; bottom: 0; top: 0; overflow-x: hidden; ...

  2. 001-电脑操作规范-2019年03月.doc

    001-电脑操作规范-2019年03月.doc   本文作者:徐晓亮 BoAi 作者腾讯QQ号码:595076941   /////////////////////////////////////// ...

  3. WebPack牛刀小试

    现在页面的功能和需求越来越复杂,繁复杂乱的JavaScript代码和一大堆的依赖包都需要包含在前端页面中.如果还用手动处理就有点像在现代战场上使用小米加步枪的味道了. 为了减小开发的复杂度,前端社区涌 ...

  4. 泛函p121可分Hilbert空间都同构于l^2

    如何理解最后面两句话, L^2与l^2同构 L^2里面 有理系数多项式 是可数稠密子集 所以L^2可分 可分Hilbert空间都同构于 l^2 傅里叶级数是一个稠密的子集

  5. javac与java版本不一致

    项目测试时遇到该问题,因为loadRunner不支持jdk1.7,但运行java脚本时提示jdk版本是1.7,实际的JAVA_HOME设置为1.6. 运行javac -version与java -ve ...

  6. 软件工程(FZU2015) 赛季得分榜,第二回合

    SE_FZU目录:1 2 3 4 5 6 7 8 9 10 11 12 13 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分=团队得分+个人贡献分 个人贡献分: 个人 ...

  7. PhpStorm的注册激活方法

    首先,需要修改本地的hosts文件(路径一般为C:\Windows\System32\drivers\etc\hosts),添加下面这行代码. 0.0.0.0 account.jetbrains.co ...

  8. Python之加密模块

    hashlib模块 加密方式以md5方式加密举例 是标准模块,直接导入即可 还有其他的加密方式,比如:.sha1()..sha224()..sha256()等,加密后的字符串长度更长,安全性更高 一. ...

  9. 使用PHPExcel导出数据库表结构及内容

    导出表结构: mysql> desc user ; +----------+--------------+------+-----+---------------------+--------- ...

  10. 给网站配置免费的HTTS证书

    取经自思否:https://segmentfault.com/a/1190000015231137 https 的网站 搜索引擎 会优先收录,所以就抽时间记录下配置博客的过程,各种找资料,终于给我找到 ...