题解 洛谷P4035/BZOJ1013【[JSOI2008]球形空间产生器】
题目链接在这QvQ
"你要求出这个n维球体的球心坐标",这使我想到的解方程......
先假设n=2,这是一个二维平面。设圆心的坐标为\((x,y)\),有两个坐标\((a_1,b_1)\)和\((a_2,b_2)\),显然两个坐标的关系为:
\((x-a_1)^2+(y-b_1)^2=(x-a_2)^2+(y-b_2)^2\)
考虑如何化简上面的式子。
\((x-a_1)^2-(x-a_2)^2+(y-b_1)^2-(y-b_2)^2=0\)
根据完全平方公式:\((x-a_1)^2=x^2+a_1^2-2 \times x \times a_1\)
\((x-a_1)^2-(x-a_2)^2=x^2+a_1^2-2 \times x \times a_1-x^2-a_2^2+2 \times x \times a_2\)
\((x-a_1)^2-(x-a_2)^2=a_1^2-2 \times x \times a_1-a_2^2+2 \times x \times a_2\)
\((x-a_1)^2-(x-a_2)^2=a_1^2-a_2^2-2(a_1-a_2)x\)
同理,\((y-b_1)^2-(y-b_2)^2=b_1^2-b_2^2-2(b_1-b_2)y\)
整理后:\(a_1^2-a_2^2-2(a_1-a_2)x+b_1^2-b_2^2-2(b_1-b_2)y=0\)
移项后:\(a_1^2-a_2^2+b_1^2-b_2^2=2(a_1-a_2)x+2(b_1-b_2)y\)
这个式子最终为:\(2(a_1-a_2)x+2(b_1-b_2)y=a_1^2-a_2^2+b_1^2-b_2^2\)
由于 \(a_1^2-a_2^2+b_1^2-b_2^2\) 是已知的,我们将 \(a_1^2-a_2^2+b_1^2-b_2^2\) 设为\(Sum\).
\(2(a_1-a_2)\) 和 \(2(b_1-b_2)\)都是已知的项,分别设为 \(a\) 和 \(b\) .
所以它又变成了我们亲切的小学奥数之解方程:\(ax+by=Sum\)
对于二维的答案是 \((x,y)\) ,\(x\) 和 \(y\) 都可以通过高斯消元的模板来解出。
对于更高的维数,跟二维同理,只不过"元"多了几个而已。
所以就这样愉快的A掉了这道大水题。
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define RI register int
using namespace std;
const int N=25;
const double eps=1e-8;
double v[N][N],f[N][N],s[N],del;
int n;
inline bool Gauss(){
for(RI k=1,i=1;i<=n;++i,k=i){
for(RI j=i+1;j<=n;++j)if(abs(f[j][i])>abs(f[k][i]))k=j;
if(fabs(del=f[k][i])<eps)return false;//不判就出BUG,不知道为啥
swap(f[i],f[k]);swap(s[i],s[k]);
for(RI j=i;j<=n;++j)f[i][j]/=del;s[i]/=del;
for(k=1;k<=n;++k)if(k!=i){
del=f[k][i];
for(RI j=i;j<=n;++j)f[k][j]-=f[i][j]*del;
s[k]-=s[i]*del;
}
}return true;
}
int main(){
scanf("%d",&n);
for(RI i=1;i<=n+1;++i)for(RI j=1;j<=n;++j)scanf("%lf",&v[i][j]);
for(RI i=1;i<=n;++i)
for(RI j=1;j<=n;++j){
s[i]+=(v[i][j]*v[i][j]-v[i+1][j]*v[i+1][j]);//求上面的 "Sum"
f[i][j]=2*(v[i][j]-v[i+1][j]);//求上面的 "a"、"b"等
}
Gauss();
for(RI i=1;i<n;++i)printf("%.3lf ",s[i]);//注意输出格式!
printf("%.3lf",s[n]);
return 0;
}
这题啥都好,就是输出格式有点制杖......请各位小心......
题解 洛谷P4035/BZOJ1013【[JSOI2008]球形空间产生器】的更多相关文章
- 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 ...
- bzoj千题计划104:bzoj1013: [JSOI2008]球形空间产生器sphere
http://www.lydsy.com/JudgeOnline/problem.php?id=1013 设球心(x1,x2,x3……) 已知点的坐标为t[i][j] 那么 对于每个i满足 Σ (t[ ...
- [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...
- 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 ...
- 【bzoj1013】[JSOI2008]球形空间产生器sphere
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4530 Solved: 2364[Subm ...
- BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元
1013: [JSOI2008]球形空间产生器sphere Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/Judg ...
随机推荐
- bzoj 3110 [Zjoi2013]K大数查询【树套树||整体二分】
树套树: 约等于是个暴力了.以区间线段树的方式开一棵权值线段树,在权值线段树的每一个点上以动态开点的方式开一棵区间线段树. 结果非常惨烈(时限20s) #include<iostream> ...
- Akka源码分析-Serialization
今天我们来谈一下akka的序列化框架,其实序列化.反序列化是一个老生常谈的问题,那么我们为什么还要研究一下akka的序列化框架呢?不就是使用哪种序列化.反序列化方法的区别么?其实刚开始的时候我也是这么 ...
- Oracle11.2.0.1升级到11.2.0.3
Oracle数据库升级也并非简单的事,这篇博客,博主对Oracle那点事做了较详细的介绍: http://blog.itpub.net/9599/viewspace-473003/ 我还属于Oracl ...
- Unix\Linux | 总结笔记 | 命令_ WC
wc[选项][参数] wc命令用来计算数字.利用wc指令我们可以计算文件的Byte数.字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据. -c或--byt ...
- RHEL5.6配置本地yum源
试验环境:RedHat Enterprise Linux 5.6(虚拟机) 一.挂载镜像 配置yum源第一步需要挂载镜像,或者直接复制操作系统的光盘文件至操作系统目录中. 挂载镜像命令如下: moun ...
- 转-CoreText 使用教程
转自:http://www.dapps.net/dev/iphone/how-to-create-a-simple-magazine-app-with-core-text.html Core Text ...
- jmeter(十六)Jmeter之Bean shell使用(一)
一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...
- Android开发学习——简单类图
1.类A继承于类B (B 是父类,A是 子类) 2.小汽车.自行车 实现车的接口 3.A中有B这个成员变量,单向关联 4.聚合,整体与部分的关系.has-a B中的构造函数(或set方法)需要 ...
- node入门(二)——gulpfile.js初探
本文关于gulpfile.js怎么写,利于完成个性化需求.本文开发环境默认已安装node,详情参考<node入门(一)——安装>. 一.安装gulp npm install -g gulp ...
- 枚举Enum通过int值或文本转为对应的枚举类型
1.数值转枚举 如果枚举类型继承了数值类型,可以直接强制转换 public enum SourceType : byte { YC = , TS = , QK = , ZQ = } //转换方式 ; ...