题链: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位。数据保证有解。

你的答案必须和标准输出一模一样才可以得分。

例子输入

2

0.0 0.0

-1.0 1.0

1.0 0.0

例子输出

0.500 1.500

提示

数据规模:



对于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 高斯消元的更多相关文章

  1. BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/Judg ...

  2. [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)

    Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...

  3. BZOJ-1013 球形空间产生器sphere 高斯消元+数论推公式

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3662 Solved: 1910 [Subm ...

  4. 【BZOJ 1013】【JSOI2008】球形空间产生器sphere 高斯消元基础题

    最基础的高斯消元了,然而我把j打成i连WA连跪,考场上再犯这种错误就真的得滚粗了. #include<cmath> #include<cstdio> #include<c ...

  5. [JSOI2008]球形空间产生器 (高斯消元)

    [JSOI2008]球形空间产生器 \(solution:\) 非常明显的一道高斯消元.给了你n+1个球上的位置,我们知道球上任何一点到球心的距离是相等,所以我们 可以利用这一个性质.我们用n+1个球 ...

  6. BZOJ 1013 球形空间产生器sphere 高斯消元

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1013 题目大意: 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困 ...

  7. BZOJ1013球形空间产生器sphere 高斯消元

    @[高斯消元] Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球 ...

  8. bzoj1013球形空间产生器sphere 高斯消元(有系统差的写法

    Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁 ...

  9. 洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)

    洛谷题目传送门 球啊球 @xzz_233 qaq 高斯消元模板题,关键在于将已知条件转化为方程组. 可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机. 由 ...

随机推荐

  1. Cannot find class: com.mysql.jdbc.driver

    mybatis配置mysql报错,信息如下 Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Caus ...

  2. Try, throw和catch用法

    PHP 5 提供了一种新的面向对象的错误处理方法. 使用思路如下: 1.Try - 使用异常的函数应该位于 "try" 代码块内.如果没有触发异常,则代码将照常继续执行.但是如果异 ...

  3. 源码学习-String类

    最近在扫描CodeDex时报了一个不能使用String.intern()的字符串来做锁对象的告警,对这个问题有疑问查了些资料,顺便学习一下String类的源码. 1.类定义 String 被final ...

  4. Quartz Spring分布式集群搭建Demo

    注:关于单节点的Quartz使用在这里不做详细介绍,直接进阶为分布式集群版的 1.准备工作: 使用环境Spring4.3.5,Quartz2.2.3,持久化框架JDBCTemplate pom文件如下 ...

  5. 多光源 MultipleLight

    使用2个Pass增加光照效果: 第一个Pass是基础光源,一般是第一个平行光:Tags{"LightMode" = "ForwardBase"} 第二个光源是增 ...

  6. 【二维树状数组】See you~

    https://www.bnuoj.com/v3/contest_show.php?cid=9148#problem/F [题意] 给定一个矩阵,每个格子的初始值为1.现在可以对矩阵有四种操作: A ...

  7. java中文乱码问题的处理方式

    URL访问java时. 注意: URL: 编码二次 URLEncoder.encode(URLEncoder.encode(searchKey, "utf-8"),"ut ...

  8. 解决webview.getFavicon()返回值总是为空的问题

    在webview中,我们需要获取网站的favicon.ico图标,但是默认状态下,WebChromeClient中的onReceivedIcon方法获取到的icon总是为null; webview.g ...

  9. ZOJ - 3829 Known Notation(模拟+贪心)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 给定一个字符串(只包含数字和星号)可以在字符串的任意位置添加一个数字 ...

  10. Servlet的过滤器(Filter)

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/writing-filters.html: Servlet过滤器是Java类,可用于Servlet ...