【BZOJ1013】【JSOI2008】球形空间产生器 高斯消元
题目描述
有一个\(n\)维空间中的球,告诉你球面上\(n+1\)个点的坐标,求球心的坐标。
\(n\leq 10\)
题解
设\(a_{i,j}\)为第\(i\)个点的第\(j\)维坐标,\(i=0\)代表球心。
假设\(n=2\):
\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】球形空间产生器 高斯消元的更多相关文章
- BZOJ.1013.[JSOI2008]球形空间产生器(高斯消元)
题目链接 HDU3571 //824kb 40ms //HDU3571弱化版 跟那个一比这个太水了,练模板吧. //列出$n+1$个二次方程后两两相减,就都是一次方程了. #include <c ...
- LG4035/BZOJ1013 「JSOI2008」球形空间产生器 高斯消元
问题描述 LG4035 BZOJ1013 题解 设答案为\((p_1,p_2,p_3,...,p_n)\) 因为是一个球体,令其半径为\(r\),则有 \[\sum_{i=1}^{n}{(a_i-p_ ...
- BZOJ1013 JSOI2008 球形空间产生器sphere 【高斯消元】
BZOJ1013 JSOI2008 球形空间产生器sphere Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点 ...
- BZOJ1013 [JSOI2008]球形空间产生器sphere(高斯消元)
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4846 Solved: 2525[Subm ...
- [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...
- bzoj千题计划104:bzoj1013: [JSOI2008]球形空间产生器sphere
http://www.lydsy.com/JudgeOnline/problem.php?id=1013 设球心(x1,x2,x3……) 已知点的坐标为t[i][j] 那么 对于每个i满足 Σ (t[ ...
- bzoj1013 [JSOI2008]球形空间产生器
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁 ...
- 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 ...
- BZOJ1013 [JSOI2008]球形空间产生器sphere[高消]
数论进度开的好慢啊.我整天做的都是什么鬼题啊. 简单的高消题,用一个式子把另外$n$个有二次项和距离的式子全消掉就行了. #include<iostream> #include<cs ...
随机推荐
- Web 应用 WEB框架 HTTP协议 初识Django
----------------------------财富存在于人的思想里,你没找到路,不等于没有路,你想知道将来要得到什么,你必须知道现在应该先做什么和先放弃什么! [web 应用] web应用 ...
- Yii1.1框架关于日志的配置的简单使用
最近开始接触新项目,新项目用的框架是Yii1.1版本的,通过看框架文档大致熟悉了解了Yii在日志方面的使用. 首先在protected/config/main.php配置文件中加入日志相关配置,如下图 ...
- Python_动态参数、名称空间、作用域、作用域链、加载顺序、函数的嵌套、global、nonlocal
1.动态参数 当实参数量与形参数量相等时,参数传递正常. def func1(a, b, c): pass func1(1, 2, 3) 当实参数量与形参数量不相等时,则会报错. def func1( ...
- Python_编写UDP通信编解码类、文件的上传、远程执行命令、黏包
1.UDP通信编解码类 (1) 类 # ------------------UDP通信解码编码类------------------------ from socket import * class ...
- JS XMLHttpRequesst对象 http post的五种请求状态
记录一下js中对http请求的几种状态,下附代码 readyState 存有 XMLHttpRequest 的状态.从 0 到 4 发生变化. 0: 请求未初始化 1: 服务器连接已建立 2: 请求已 ...
- js在微信、微博、QQ、Safari唤起App的解决方案
首先看下完整的流程: 简单说下universal link 在iOS9之前,唤起方式和现在安卓是一个的,都是使用scheme进行唤起,这种方式有个小问题,每次唤起,都会给个提示:是否打开xx应用,这样 ...
- 【转帖】Linux定时任务Crontab命令详解
Linux定时任务Crontab命令详解 https://www.cnblogs.com/intval/p/5763929.html 知道有crontab 以及 at 命令 改天仔细学习一下 讲sys ...
- STL 序列容器
转自时习之 STL中大家最耳熟能详的可能就是容器,容器大致可以分为两类,序列型容器(SequenceContainer)和关联型容器(AssociativeContainer)这里介绍STL中的各种序 ...
- bootstrap模态框关闭后清除模态框的数据
https://segmentfault.com/q/1010000008789123 bootstrap模态框第二次打开时如何清除之前的数据? 我用了bootstrap模态框的remote功能,在弹 ...
- embed标签的flash层级太高问题
因为客户要求,项目得兼容IE的兼容模式 页面到了flash都会遮挡底部悬浮的导航. 改变浮动窗口和embed的层级还是不可以.应该不是层级的关系. 最后百度解决方案:在embed标签内添加了wmode ...