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个点的坐标,你需要以最快的速度确 ...
随机推荐
- jQuery总结02
1 如何搭建一个 jQuery 环境? 2 jQuery 对象与 DOM 对象一样吗?区别是什么? 3 jQuery选择器类型有哪些?
- SVM中的线性分类器
线性分类器: 首先给出一个非常非常简单的分类问题(线性可分),我们要用一条直线,将下图中黑色的点和白色的点分开,很显然,图上的这条直线就是我们要求的直线之一(可以有无数条这样的直线) 假如说, ...
- ubuntu 12.10 禁用触摸板
1. 打开终端,输入 sudo rmmod psmouse 禁用触摸板,输入 sudo modprobe psmouse 恢复触摸板 2.syndaemon -i 10 -d >/dev/nul ...
- DCloud-MUI:窗口管理
ylbtech-DCloud-MUI:窗口管理 通过预加载解决切页白屏问题,通过封装原生动画解决SPA模式的动画卡顿 1.返回顶部 1.页面初始化 在app开发中,若要使用HTML5+扩展api,必须 ...
- 【K8s】Kubernetes架构理解
抽空学习了一下Kubernetes,感觉和大数据领域内集群的资源管理.任务调度等有异曲同工之处,简单总结一下备忘. [概念] Kubernetes是一个工业级的容器编排平台,单词有点长,常用K8s代称 ...
- TCP/IP详解(一)
SYN中的MSS选项是告诉对端,本端在本地连接的每个TCP分节中愿意接收的最大数据量.发送端TCP使用接收端的MSS值作为发送分节的最大大小. TCP半关闭使用的情况较少,可用于通知对端本端数据已输入 ...
- Laravel5.1学习笔记3 HTTP中间件
HTTP 中间件 简介 建立中间件 注册中间件 可终止中间件 简介 HTTP 中间件提供一个方便的机制来过滤进入应用程序的 HTTP 请求,例如,Laravel 默认包含了一个中间件来检验用户身份验证 ...
- Last-Modified If-Modified-Since ETag If-None-Match
Last-Modified.If-Modified-Since 有些数据随时都在变化. CNN.com 的主页经常几分钟就更新.另一方面,Google.com 的主页几个星期才更新一次 (当他们上传特 ...
- 【转载】【翻译】JavaScript Scoping and Hoisting--JS作用域和变量提升的探讨
原文链接:http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting 你知道下面的JavaScript代码执行后会aler ...
- AndroidStudio怎样导入library项目库
先打开一个Project,然后将libraryr的项目作为module进行导入: File菜单->import module菜单 以上只是导入进来,还没有作为与project真正有效的一部分.需 ...