N-dimensional Sphere

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 668    Accepted Submission(s): 234

Problem Description
In an N-dimensional space, a sphere is defined as {(x1, x2 ... xN)| ∑(xi-Xi)^2 = R^2 (i=1,2,...,N) }. where (X1,X2…XN) is the center. You're given N + 1 points on an N-dimensional sphere and are asked to calculate the center of the sphere.
 
Input
The first line contains an integer T which is the number of test cases.
For each case there's one integer N on the first line.
Each of the N+1 following lines contains N integers x1, x2 ... xN describing the coordinate of a point on the N-dimensional sphere.
(0 <= T <= 10, 1 <= N <= 50, |xi| <= 10^17)
 
Output
For the kth case, first output a line contains “Case k:”, then output N integers on a line indicating the center of the N-dimensional sphere
(It's guaranteed that all coordinate components of the answer are integers and there is only one solution and |Xi| <= 10^17)
 
Sample Input
2
2
1 0
-1 0
0 1
3
2 2 3
0 2 3
1 3 3
1 2 4
 
Sample Output
Case 1:
0 0
Case 2:
1 2 3
 
 
 
这条题目的做法很容易想出来 。
凭借 n + 1 个点代入 n 维圆公式, 求圆心 。
然后用第 n + 1 个方程( 设下标为n )  sigma( ( Xi - Oi )^2 )  = R^2 
跟前n 个方程联立容易得到 :
  sigma( ( Xi - Oi )^2 )  =  sigma( ( Yi - Oi )^2 )  
两边都展开然后消掉Oi^2就得到
  sigma(  2*( Xi - Yi )*Oi ) = sigma(  Xi^2 - Yi^2 )  .
得到 n 个这样的 n 元一次方程之后就可以利用高斯消元解决。
 
但首先 fabs( xi ) <= 1e17 的。 大数据的话显然计算过程溢出 。
就用到  sigma( ai * xi ) = an ( % mod ) 来解决。 求得解依然唯一。
 
在高斯消元的过程中会有除法 , 用求逆来解决。
由于数据很大, 欧拉定理会溢 , 那么用扩展欧几里得就OK 。
 
然后还需要将数据加一个偏移差,把所有数据处理成正数 (相当于把整个图形平移了,最后减回来不影响结果)。
避免在取余过程中把(负数+mod)%mod弄成了正。
 
 
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <stack>
#include <algorithm>
using namespace std;
#define root 1,n,1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define lr rt<<1
#define rr rt<<1|1
typedef long long LL;
typedef pair<int,int>pii;
#define X first
#define Y second
const int oo = 1e9+;
const double PI = acos(-1.0);
const double eps = 1e- ;
const int N = ;
#define mod 200000000000000003LL
#define dif 100000000000000000LL LL Mod(LL x) {
if (x >= mod) return x - mod;
return x;
}
LL mul(LL a, LL b) {
LL res;
for (res = ; b; b >>= ) {
if (b & )
res = Mod(res + a);
a = Mod(a + a);
}
return res;
} void e_gcd( LL a , LL b , LL &d , LL &x , LL &y ) {
if( !b ){ d = a , x = , y = ; return ; }
e_gcd( b , a%b , d , y , x );
y -= x*(a/b);
} LL inv( LL a , LL n ){
LL d,x,y ;
e_gcd(a,n,d,x,y);
return ( x % n + n ) % n ;
} LL A[N][N] , g[N][N];
int n ; void Gauss() { for( int i = ; i < n ; ++i ) {
int r = i ;
for( int j = i ; j < n ; ++j ) {
if( g[j][i] ) { r = j ; break ; }
}
if( r != i ) for( int j = ; j <= n ; ++j ) swap( g[i][j] , g[r][j] ) ; LL INV = inv( g[i][i] , mod );
for( int k = i + ; k < n ; ++k ) {
if( g[k][i] ) {
LL f = mul( g[k][i] , INV );
for( int j = i ; j <= n ; ++j ) {
g[k][j] -= mul( f , g[i][j] );
g[k][j] = ( g[k][j] % mod + mod ) % mod ;
}
}
}
}
for( int i = n - ; i >= ; --i ){
for( int j = i + ; j < n ; ++j ){
g[i][n] -= mul( g[j][n] , g[i][j] ) , g[i][n] += mod , g[i][n] %= mod ;
}
g[i][n] = mul( g[i][n] , inv( g[i][i] , mod ) );
}
} void Run() { scanf("%d",&n);
memset( g , , sizeof g );
for( int i = ; i <= n ; ++i ) {
for( int j = ; j < n ; ++j ) {
scanf("%I64d",&A[i][j]);
A[i][j] += dif ;
}
} for( int i = ; i < n ; ++i ){
for( int j = ; j < n ; ++j ){
g[i][j] = Mod( A[n][j] - A[i][j] + mod );
g[i][j] = mul( g[i][j] , ) ;
g[i][n] = Mod( g[i][n] + mul( A[n][j] , A[n][j] ) );
g[i][n] = Mod( g[i][n] - mul( A[i][j] , A[i][j] ) + mod );
}
} Gauss();
printf("%I64d",g[][n]-dif);
for( int i = ; i < n ; ++i ){
printf(" %I64d",g[i][n]-dif);
}puts("");
} int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif // LOCAL
int cas = , _ ; scanf("%d",&_ );
while( _-- ){
printf("Case %d:\n",cas++); Run();
}
}

HDU 3571 N-dimensional Sphere( 高斯消元+ 同余 )的更多相关文章

  1. HDU.3571.N-dimensional Sphere(高斯消元 模线性方程组)

    题目链接 高斯消元详解 /* $Description$ 在n维空间中给定n+1个点,求一个点使得这个点到所有点的距离都为R(R不给出).点的任一坐标|xi|<=1e17. $Solution$ ...

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

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

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

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

  4. HDU 5755 Gambler Bo(高斯消元)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5755 [题目大意] 一个n*m由0,1,2组成的矩阵,每次操作可以选取一个方格,使得它加上2之后对 ...

  5. HDU 4818 RP problem (高斯消元, 2013年长春区域赛F题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4818 深深地补一个坑~~~ 现场赛坑在这题了,TAT.... 今天把代码改了下,过掉了,TAT 很明显 ...

  6. ACM学习历程—HDU 3949 XOR(xor高斯消元)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题目大意是给n个数,然后随便取几个数求xor和,求第k小的.(重复不计算) 首先想把所有xor的 ...

  7. lydsy1013: [JSOI2008]球形空间产生器sphere 高斯消元

    题链:http://www.lydsy.com/JudgeOnline/problem.php?id=1013 1013: [JSOI2008]球形空间产生器sphere 时间限制: 1 Sec  内 ...

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

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

  9. hdu 5833 Zhu and 772002 高斯消元

    Zhu and 772002 Problem Description Zhu and 772002 are both good at math. One day, Zhu wants to test ...

随机推荐

  1. 从0构建webpack开发环境(二) 添加css,img的模块化支持

    在一个简单的webpack.config.js中,构建了一个基础的webpack.config.js文件,但是只支持js模块的打包. 本篇中添加对css和img的模块化支持 首先需要安装三个个load ...

  2. 20180329-layoutSubviews的调用机制

    如果你想强制更新布局,不要直接调用此方法,你可以调用setNeedsLayout方法,如果你想立即显示你的views,你需要调用layoutIfNeed方法 layoutSubviews作用: lay ...

  3. GeneXus笔记本—常用函数(中)

    这篇文章是接着上一篇 常用函数(上)来写的 上次写到了Format 这个函数 我们继续接着这个往下来好了(づ ̄ 3 ̄)づ  还是一样 函数列表在此 https://wiki.genexus.com/c ...

  4. ffmpeg音频文件转换之使用stdin/stdout或BytesIO对象输入输出

    最近在搞小程序录音,然后使用百度接口做语音识别. 小程序目前仅支持mp3和aac编码格式.虽然百度接口提供的m4a格式支持能直接识别小程序的录音文件,但由于自己还有其他一系列需求(比如直接读取数据,根 ...

  5. 初学Java 从控制台读取输入

    代码 import java.util.Scanner; public class ComputeArea { public static void main(String[] args) { Sca ...

  6. linux的iptables设置---防火墙

    1.首先介绍一下指令和相关配置文件 启动指令:service iptables start 重启指令:service iptables restart 关闭指令:service iptables st ...

  7. yara规则的二进制漏洞

    https://www.anquanke.com/post/id/147675 yara32.exe 后缀.yar

  8. [CSS布局]简单的CSS三列布局

    前言 公司终于可以上外网了,近期在搞RN的东西,暂时脑子有点晕,等过段时间再来写点总结.倒是最近有个新学前端的同学经常会问一些基础知识,工作空闲写了小Demo给他看,全是很基础的知识,纯粹是顺便记录在 ...

  9. java使用对象类型作为方法的参数

  10. Python3.5-20190521-廖老师-自我笔记-单元测试

    执行结果