lydsy1013: [JSOI2008]球形空间产生器sphere 高斯消元
题链:http://www.lydsy.com/JudgeOnline/problem.php?id=1013
1013: [JSOI2008]球形空间产生器sphere
时间限制: 1 Sec 内存限制: 162 MB
提交: 3063 解决: 1607
[提交][][]
题目描写叙述
有一个球形空间产生器可以在n维空间中产生一个坚硬的球体。如今,你被困在了这个n维球体中。你仅仅知道球面上n+1个点的坐标。你须要以最快的速度确定这个n维球体的球心坐标。以便于摧毁这个球形空间产生器。
输入
第一行是一个整数,n。接下来的n+1行,每行有n个实数,表示球面上一点的n维坐标。每个实数精确到小数点后6位,且其绝对值都不超过20000。
输出
有且仅仅有一行。依次给出球心的n维坐标(n个实数),两个实数之间用一个空格隔开。每一个实数精确到小数点后3位。数据保证有解。
你的答案必须和标准输出一模一样才可以得分。
例子输入
0.0 0.0
-1.0 1.0
1.0 0.0
例子输出
提示
数据规模:
对于40%的数据,1<=n<=3
对于100%的数据,1<=n<=10
提示:给出两个定义:
1、 球心:到球面上随意一点距离都相等的点。
2、 距离:设两个n为空间上的点A, B的坐标为(a1, a2, …, an), (b1, b2, …, bn),则AB的距离定义为:dist = sqrt( (a1-b1)^2 + (a2-b2)^2 + … + (an-bn)^2 )
做法:把圆心坐标设成 x1,x2,x3.... ,有若干个点 当中两个点坐标为a1,a2, a3.... 和b1,b2,b3.
能够写出方程
sqrt((a1-x1)^2+(a2-x2)^2+(a3-x3)^2)=sqrt((b1-x1)^2+(b2-x2)^2+(b3-x3)^2)
两边去根号。
(a1-x1)^2+(a2-x2)^2+(a3-x3)^2=(b1-x1)^2+(b2-x2)^2+(b3-x3)^2
把平分打开
a1^2+x1^2+a2^2+x2^2+a3^2+x3^2-2*a1*x1-2*a2*x2-2*a3*x3=b1^2+x1^2+b2^2+x2^2+b3^2+x3^2-2*b1*x1-2*b2*x2-2*b3*x3
整理下 把x的二次方 两边都减去。把x的一次放左边 0次项放右边。
-2*a1*x1-2*a2*x2-2*a3*x3+2*b1*x1+2*b2*x2+2*b3*x3=b1^2+b2^2+b3^2-a1^2-a2^2-a3^2
整理下
(-2*a1+2*b1)*x1+(-2*a2+2*b2)*x2+(-2*a3+2*b3)*x3=b1^2+b2^2+b3^2-a1^2-a2^2-a3^2
一共同拥有n+1个点,所以能够写出n条这种等式。
最后的形式就是AX=b了, 然后就能够高斯消元了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#include <stack>
#include <queue>
#include <vector>
#include <deque>
#include <set>
#include <map> #define eps 1e-9
const int MAXN=220;
double a[MAXN][MAXN],x[MAXN];//方程的左边的矩阵和等式右边的值,求解之后x存的就是结果
int equ,var;//方程数和未知数个数
/*
*返回0表示无解。1表示有解
*/
int Gauss()
{
int i,j,k,col,max_r;
for(k=0,col=0;k<equ&&col<var;k++,col++)
{
max_r=k;
for(i=k+1;i<equ;i++)
if(fabs(a[i][col])>fabs(a[max_r][col]))
max_r=i;
if(fabs(a[max_r][col])<eps)return 0;
if(k!=max_r)
{
for(j=col;j<var;j++)
swap(a[k][j],a[max_r][j]);
swap(x[k],x[max_r]);
}
x[k]/=a[k][col];
for(j=col+1;j<var;j++)a[k][j]/=a[k][col];
a[k][col]=1;
for(i=0;i<equ;i++)
if(i!=k)
{
x[i]-=x[k]*a[i][k];
for(j=col+1;j<var;j++)a[i][j]-=a[k][j]*a[i][col];
a[i][col]=0;
}
}
return 1;
} double dian[13][13];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n+1;i++)
for(int j=0;j<n;j++)
scanf("%lf",&dian[i][j]);
equ=n;
var=n;
memset(x,0,sizeof x);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
a[i][j]=-2.0*dian[i][j]+2*dian[i+1][j];
for(int j=0;j<n;j++)
x[i]+=dian[i+1][j]*dian[i+1][j]-dian[i][j]*dian[i][j];
}
Gauss();
for(int i=0;i<n;i++)
{
if(i!=0)
printf(" ");
printf("%.3lf",x[i]);
}
}
return 0;
}
lydsy1013: [JSOI2008]球形空间产生器sphere 高斯消元的更多相关文章
- BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元
1013: [JSOI2008]球形空间产生器sphere Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/Judg ...
- [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...
- BZOJ-1013 球形空间产生器sphere 高斯消元+数论推公式
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3662 Solved: 1910 [Subm ...
- 【BZOJ 1013】【JSOI2008】球形空间产生器sphere 高斯消元基础题
最基础的高斯消元了,然而我把j打成i连WA连跪,考场上再犯这种错误就真的得滚粗了. #include<cmath> #include<cstdio> #include<c ...
- [JSOI2008]球形空间产生器 (高斯消元)
[JSOI2008]球形空间产生器 \(solution:\) 非常明显的一道高斯消元.给了你n+1个球上的位置,我们知道球上任何一点到球心的距离是相等,所以我们 可以利用这一个性质.我们用n+1个球 ...
- BZOJ 1013 球形空间产生器sphere 高斯消元
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1013 题目大意: 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困 ...
- BZOJ1013球形空间产生器sphere 高斯消元
@[高斯消元] Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球 ...
- bzoj1013球形空间产生器sphere 高斯消元(有系统差的写法
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁 ...
- 洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)
洛谷题目传送门 球啊球 @xzz_233 qaq 高斯消元模板题,关键在于将已知条件转化为方程组. 可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机. 由 ...
随机推荐
- github 添加完sshkey之后仍然需要输入密码
1.在家目录下创建.netrc文件,内容如下 machine github.com login username password password window下创建:在用户文件夹如C:\Users ...
- vue中去掉烦人的格式警告(eslint )
解决办法: 一,源头上解决,下次创建项目时就不要使用eslint连接项目代码 如上图所示,就是在这一步的时候选择no: 二,在build文件夹中找到webpack.base.conf.js文件 找到右 ...
- 小甲鱼Python学习笔记
一 isdigit()True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字False: 汉字数字Error: 无 isdecimal()True: Unicode数字, ...
- jq ajax请求error: Maximum call stack size exceeded
原因是data中参数iconUrl这个变量未声明导致的.jq在内部循环时报错
- laravel学习笔记1--基础
一.安装 1.安装 composer create-project laravel/laravel=v5.5.28 laravel 2.测试 配置nginx根目录为laravel/public,并且美 ...
- python3.x Day6 多进程
多进程:1.每个子进程申请到的资源都是独立的,不与其他进程共享.2.语法上和线程基本上差不多,使用multiprocessing.Process(target=xxxx,args=(xxx,xxx,x ...
- 树莓派 -- oled 续(1) wiringPi
在上文中,分析了wiringPi 的oled demo是使用devfs来控制spi master和spi slave通讯. https://blog.csdn.net/feiwatson/articl ...
- python中基于tcp协议的通信(数据传输)
tcp协议:流式协议(以数据流的形式通信传输).安全协议(收发信息都需收到确认信息才能完成收发,是一种双向通道的通信) tcp协议在OSI七层协议中属于传输层,它上承用户层的数据收发,下启网络层.数据 ...
- 17-看图理解数据结构与算法系列(NoSQL存储-LSM树)
关于LSM树 LSM树,即日志结构合并树(Log-Structured Merge-Tree).其实它并不属于一个具体的数据结构,它更多是一种数据结构的设计思想.大多NoSQL数据库核心思想都是基于L ...
- 2015 湘潭大学程序设计比赛(Internet)部分题解,其中有一个题与NYOJ1057很像,贪心过~~
仙剑奇侠传 祝玩的开心 ...