洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)
球啊球 @xzz_233 qaq
高斯消元模板题,关键在于将已知条件转化为方程组。
可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机。
由高中数学知识可以知道,三点定圆(二维),四点定球(三维)······以此类推,应该是\(n+1\)个点才能确定一个\(n\)维空间下的球。
那么隐藏的另一个关键未知量在哪里呢?
想想圆的标准方程\((x-x_0)^2+(y-y_0)^2=r^2\),除了圆心坐标,半径不也对这个圆起到决定性作用么?
接下来,额外设一个未知量——球的半径\(r\),开始试着对条件式进行变换。
对于\(n+1\)个点,它们与球心的距离是定值\(r\),那么我们可以得到形式如下的\(n+1\)个方程(a为球面点坐标,x为球心坐标)
\]
显然我们要把已知量和未知量分开,于是展开,移项
\]
\]
发现\(r^2-x_1^2-x_2^2-···-x_n^2\)与\(a\)无关,所以考虑换元,设\(t=r^2-x_1^2-x_2^2-···-x_n^2\)(实际上我们并不用求\(r\))
终于,我们可以看到一个关于\(x_1,x_2,···,x_n,t\)的\((n+1)\)元方程组了,上高斯消元
具体实现看代码
#include<cmath>
#include<cstdio>
#define R register
#define init for(i=1;i<=n;++i)ne[i-1]=pr[i+1]=i
const int N=19;
int p[N],pr[N],ne[N];
double a[N][N];
int main(){
R int n,i,j,k,x;
R double mx,d;
scanf("%d",&n);++n;
init;//链表初始化,为了实现交换行
for(i=1;i<=n;++i){
for(j=1;j<n;++j){
scanf("%lf",&d);//处理系数
a[i][j]=d*2;a[i][n+1]+=d*d;
}
a[i][n]=1;//t的系数为1
}
for(k=1;k<=n;++k){
mx=0;//蒟蒻没有交换主元,而是交换行
//这样做防掉精度的效果可能不如交换主元
for(i=ne[0];i;i=ne[i])
if(mx<fabs(a[i][k]))
mx=fabs(a[i][k]),x=i;
d=a[p[k]=x][k];//选择当前a最大的一行
pr[ne[pr[x]]=ne[x]]=pr[x];
for(j=1;j<=n+1;++j)
a[x][j]/=d;
for(i=ne[0];i;i=ne[i])
for(d=a[i][j=k];j<=n+1;++j)
a[i][j]-=d*a[x][j];
}//高斯消元
init;
for(k=n;k;--k){
d=a[x=p[k]][n+1];
pr[ne[pr[x]]=ne[x]]=pr[x];
for(i=ne[0];i;i=ne[i])
a[i][n+1]-=d*a[i][k];
}//回代
for(k=1;k<n;++k)
printf("%.3f ",a[p[k]][n+1]);
puts("");
return 0;
}
洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)的更多相关文章
- [洛谷P4035][JSOI2008]球形空间产生器
题目大意:给你$n$个点坐标,要你求出圆心 题解:随机化,可以随机一个点当圆心,然后和每个点比较,求出平均距离$r$,如果到这个点的距离大于$r$,说明离这个点远了,就给圆心施加一个向这个点的力:若小 ...
- BZOJ.1013.[JSOI2008]球形空间产生器(高斯消元)
题目链接 HDU3571 //824kb 40ms //HDU3571弱化版 跟那个一比这个太水了,练模板吧. //列出$n+1$个二次方程后两两相减,就都是一次方程了. #include <c ...
- 洛谷4035 JSOI2008球形空间产生器 (列柿子+高斯消元)
题目链接 qwq 首先看到这个题,感觉就应该从列方程入手. 我们设给定的点的坐标矩阵是\(x\),然后球心坐标\(a_1,a_2....a_n\) 根据欧几里得距离公式,对于一个\(n维空间\)的第\ ...
- 洛谷 4035 [JSOI2008]球形空间产生器
题目戳这里 一句话题意 给你 n+1 个 n 维点,需要你求出这个n维球的球心.(n<=10) Solution 这个题目N维的话确实不好想,反正三维就已经把我搞懵了,所以只好拿二维类比. 首先 ...
- 【BZOJ1013】【JSOI2008】球形空间产生器 高斯消元
题目描述 有一个\(n\)维空间中的球,告诉你球面上\(n+1\)个点的坐标,求球心的坐标. \(n\leq 10\) 题解 设\(a_{i,j}\)为第\(i\)个点的第\(j\)维坐标,\(i=0 ...
- 洛谷P4783 【模板】矩阵求逆(高斯消元)
题意 题目链接 Sol 首先在原矩阵的右侧放一个单位矩阵 对左侧的矩阵高斯消元 右侧的矩阵即为逆矩阵 // luogu-judger-enable-o2 #include<bits/stdc++ ...
- 洛谷P3232 [HNOI2013]游走(高斯消元+期望)
传送门 所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了…… 首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号 边的期望次 ...
- 洛谷 P6030 - [SDOI2012]走迷宫(高斯消元+SCC 缩点)
题面传送门 之所以写个题解是因为题解区大部分题解的做法都有 bug(u1s1 周六上午在讨论区里连发两个 hack 的是我,由于我被禁言才让 ycx 代发的) 首先碰到这种期望题,我们套路地设 \(d ...
- LG4035/BZOJ1013 「JSOI2008」球形空间产生器 高斯消元
问题描述 LG4035 BZOJ1013 题解 设答案为\((p_1,p_2,p_3,...,p_n)\) 因为是一个球体,令其半径为\(r\),则有 \[\sum_{i=1}^{n}{(a_i-p_ ...
随机推荐
- 51Nod 1677 treecnt
一道比较基础的计数题,还是一个常用的单独计算贡献的例子. 首先看题目和范围,暴力枚举肯定是不可行的,而且\(O(n\ logn)\)的算法貌似很难写. 那我们就来想\(O(n)\)的吧,我们单独考虑每 ...
- PV原语操作详解
from http://www.blogjava.net/wxqxs/archive/2009/05/10/277320.html PV原语通过操作信号量来处理进程间的同步与互斥的问题.其核心就是一段 ...
- 换了电脑如何使用hexo继续写博客
前言 我们知道,使用 Github+hexo 搭建一个个人博客确实需要花不少时间的,我们搭好博客后使用的挺好,但是如果我们有一天电脑突然坏了,或者换了系统,那么我们怎么使用 hexo 再发布文章到个人 ...
- CentOS搭建NAT和DHCP服务,实现共享上网
什么是NAT? NAT(Network address translation)即网络地址转换,作为一种过渡解决手段,可以用来减少对全球合法IP地址的需求.简单的说,NAT就是在内部专用网络中使用内部 ...
- 一文让你熟练掌握Linux的ncat(nc)命令
一文让你熟练掌握Linux的ncat(nc)命令 ncat 或者说 nc 是一款功能类似 cat 的工具,但是是用于网络的.它是一款拥有多种功能的 CLI 工具,可以用来在网络上读.写以及重定向数据. ...
- 实验二Java面向对象程序设计_20135129李畅宇
ava第二次实验报告 课程:Java实验 班级:201352 姓名:池彬宁 学号:20135212 成绩: 指导教师:娄佳鹏 实验日期:15.05.05 ...
- 语音笔记:MFCC
一,传统语音识别体系结构 二,MFCC特征提取 MFCC(Mel-frequency cepstral coefficients):梅尔频率倒谱系数.梅尔频率是基于人耳听觉特性提出来的, 它与Hz频率 ...
- 使用Junit进行单元测试
使用Junit进行单元测试 一.目的和要求 JUnit是一款由Erich Gamma(<设计模式>的作者)和Kent Beck(极限编程的提出者)编写的开源的回归测试框架,供Java编码人 ...
- BETA 版冲刺前准备
任务博客 组长博客 总的来讲Alpha阶段我们计划中的工作是如期完成的.不过由于这样那样的原因,前后端各个任务完成度不算非常高,距离完成一个真正好用.完美的软件还有所差距. 过去存在的问题 测试工作未 ...
- Ehcache Monitor使用一例
场景介绍:系统集成Shiro,使用Ehcache保存用户登录限制次数,常有用户密码被锁,影响工作效率. 在不考虑集成SSO,LDAP,也不引入身份校验,邮件,短信等解锁特性下.使用Ehcache Mo ...