BZOJ 1013 cogs 1845 [JSOI2008]球形空间产生器sphere
题目描述
有一个球形空间产生器能够在n维空间中产生一个坚硬的球体。现在,你被困在了这个n维球体中,你只知道球
面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器。
输入
第一行是一个整数n(1<=N=10)。接下来的n+1行,每行有n个实数,表示球面上一点的n维坐标。每一个实数精确到小数点
后6位,且其绝对值都不超过20000。
输出
有且只有一行,依次给出球心的n维坐标(n个实数),两个实数之间用一个空格隔开。每个实数精确到小数点
后3位。数据保证有解。你的答案必须和标准输出一模一样才能够得分。
样例输入
0.0 0.0
-1.0 1.0
1.0 0.0
样例输出//大坑!!!这题在BZOJ上行末不能有空格,不然PE!丧病……上面要求的6位小数也是假的,要3位
提示
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}$
//博主是LaTeX成瘾者
解题思路
按照提示列出方程,发现二次项好烦啊!于是第1到第n个点的方程全部与第n+1个点的方程相减,二次项就消去了,然后就直接套高斯消元吧(个人觉得高斯消元解线性方程组就是加减消元的纯模拟,最多再加上了一个技巧——找当前列最大系数来消避免被卡精度)。这题不找当前列最大系数不会被卡精度,我没写……
源代码
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
double m[][]={};
double x[]={};
double xy[][]={},sum[]={};//sum[i]为第i个点到原点距离的平方;
int main()
{
//freopen("bzoj_1013.in","r",stdin);
//freopen("bzoj_1013.out","w",stdout);//cogs的印记
scanf("%d",&n);
for(int i=;i<=n+;i++)
{
for(int j=;j<=n;j++)
{
scanf("%lf",&xy[i][j]);
sum[i]+=xy[i][j]*xy[i][j];
}
}
for(int i=;i<=n;i++)//消去二次项,形成m
{
for(int j=;j<=n;j++)
{
m[i][j]=*(xy[i][j]-xy[n+][j]);
}
m[i][n+]=sum[i]-sum[n+];
}
//高斯消元
for(int i=;i<=n;i++)
{
for(int j=i+;j<=n;j++)
{
if(abs(m[j][i])<1e-) continue;
double k=m[j][i]/m[i][i];
for(int h=i;h<=n+;h++)
{
m[j][h]-=m[i][h]*k;
}
}
}
for(int i=n;i;i--)
{
x[i]=m[i][n+]/m[i][i];
for(int j=i-;j;j--)
{
m[j][n+]-=x[i]*m[j][i];
m[j][i]=;
}
}
for(int i=;i<n;i++) printf("%.3lf ",x[i]);
printf("%.3lf",x[n]);
return ;
}
BZOJ 1013 cogs 1845 [JSOI2008]球形空间产生器sphere的更多相关文章
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
- BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元
1013: [JSOI2008]球形空间产生器sphere Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/Judg ...
- bzoj 1013 [JSOI2008]球形空间产生器sphere(高斯消元)
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3584 Solved: 1863[Subm ...
- BZOJ 1013 [JSOI2008]球形空间产生器sphere
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3074 Solved: 1614[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
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4530 Solved: 2364[Subm ...
- BZOJ1013 [JSOI2008]球形空间产生器sphere(高斯消元)
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4846 Solved: 2525[Subm ...
- lydsy1013: [JSOI2008]球形空间产生器sphere 高斯消元
题链:http://www.lydsy.com/JudgeOnline/problem.php?id=1013 1013: [JSOI2008]球形空间产生器sphere 时间限制: 1 Sec 内 ...
- 线性代数(高斯消元):JSOI2008 球形空间产生器sphere
JSOI2008 球形空间产生器sphere [题目描述] 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确 ...
随机推荐
- TensorFlow Lite demo——就是为嵌入式设备而存在的,底层调用NDK神经网络API,注意其使用的tf model需要转换下,同时提供java和C++ API,无法使用tflite的见后
Introduction to TensorFlow Lite TensorFlow Lite is TensorFlow’s lightweight solution for mobile and ...
- codevs1253 超级市场(dp)
1253 超级市场 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 某人喜欢按照自己的规则去市场买菜,他每天 ...
- 字符串转为JSON对象
经常写字符串转为JSON对象,但是每次没有说一次就成功的,老是搞错属于哪个包的方法,遂记录一下 JSONObject.parseObject(str);这个方法需要导入包 com.alibaba.fa ...
- 【题解】【CodeForces712C】Memory and De-Evolution
[题目描述] 给定一个边长为xx的正三角形,现在每秒钟你可以改变其中一条边的长度(修改量整数),在改变过程中,每秒钟都需要保证改变后的三角形是合法的,且变成均为正整数. 现在需要最终把三角形改变成边长 ...
- 基于artDialog的扩展
/* * * 引用此文件必须引用以下两个资源文件,并且还要引用jQuery * <link href="ui-dialog.css" rel="stylesheet ...
- 在PL/SQL中使用游标、动态sql和绑定变量的小例子
需求:查询并输出30号部门的雇员信息 方式一:使用 loop...fetch SET serveroutput ON; DECLARE CURSOR c_emp IS ; v_emp emp%rowt ...
- 三星的Knox Warranty Bit原理
它是如何触发的? 这个值的状态是烧录在主板上,无法刷写修改, 从0到1 不可逆,除非替换硬件 If a non-Knox boot loader or kernel has been installe ...
- Sobel算子取代:基于特定点方向的canny边缘检测
前言: Canny边缘检测使用了Sobel算子,计算dx和dy两个方向,对于特定方向的边缘检测,可以作少量修改. 代码: 计算特定方向上的边缘 void CannyOrient( cv::Mat &a ...
- java中的位运算及移位运算
为了方便对二进制位进行操作,Java给我们提供了以下四个二进制位操作符: & 按位与 | 按位或 ^ 按位异或 ~ 按位取反 Java中有三个移位运算符: 左移:&l ...
- How to add jdk8 in Eclipse Indigo
I just read How to have Eclipse use JDK8 to compile a project? What i added jdk8 to eclipse as, Fro ...