博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1013:[JSOI2008]球形空间产生器sphere(高斯消元)
阅读量:6135 次
发布时间:2019-06-21

本文共 1677 字,大约阅读时间需要 5 分钟。

Description

  有一个球形空间产生器能够在n维空间中产生一个坚硬的球体。现在,你被困在了这个n维球体中,你只知道球

面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器。

Input

  第一行是一个整数n(1<=N=10)。接下来的n+1行,每行有n个实数,表示球面上一点的n维坐标。每一个实数精确到小数点

后6位,且其绝对值都不超过20000。

Output

  有且只有一行,依次给出球心的n维坐标(n个实数),两个实数之间用一个空格隔开。每个实数精确到小数点

后3位。数据保证有解。你的答案必须和标准输出一模一样才能够得分。

Sample Input

2
0.0 0.0
-1.0 1.0
1.0 0.0

Sample Output

0.500 1.500

HINT

Solution

Code

1 #include
2 #include
3 #include
4 #include
5 #define N (101) 6 using namespace std; 7 8 double p[N][N],f[N][N],ans[N]; 9 int n;10 11 void Gauss()12 {13 for (int i=1; i<=n; ++i)14 {15 int num=i;16 for (int j=i+1; j<=n; ++j)17 if (fabs(f[j][i])>fabs(f[num][i])) num=j;18 if (num!=i) swap(f[i],f[num]);19 for (int j=i+1; j<=n; ++j)20 {21 double t=f[j][i]/f[i][i];22 for (int k=i; k<=n+1; ++k)23 f[j][k]-=t*f[i][k];24 }25 }26 for (int i=n; i>=1; --i)27 {28 for (int j=i+1; j<=n; ++j)29 f[i][n+1]-=f[i][j]*ans[j];30 ans[i]=f[i][n+1]/f[i][i];31 }32 }33 34 int main()35 {36 scanf("%d",&n);37 for (int i=1; i<=n+1; ++i)38 for (int j=1; j<=n; ++j)39 scanf("%lf",&p[i][j]);40 for (int i=1; i<=n; ++i)41 for (int j=1; j<=n; ++j)42 {43 f[i][n+1]+=p[i][j]*p[i][j]-p[i+1][j]*p[i+1][j];44 f[i][j]=2*(p[i][j]-p[i+1][j]);45 }46 Gauss();47 for (int i=1; i<=n-1; ++i)48 printf("%.3lf ",ans[i]);49 printf("%.3lf\n",ans[n]);50 }

转载于:https://www.cnblogs.com/refun/p/8950100.html

你可能感兴趣的文章
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
前端学习之正则表达式
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
codeforce 599B Spongebob and Joke
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
9、Dubbo-配置(4)
查看>>
前端第七天
查看>>
BZOJ 2190[SDOI2008]仪仗队
查看>>
图解SSH原理及两种登录方法
查看>>
[转载] 七龙珠第一部——第058话 魔境圣地
查看>>
【总结整理】JQuery基础学习---样式篇
查看>>
查询个人站点的文章、分类和标签查询
查看>>
基础知识:数字、字符串、列表 的类型及内置方法
查看>>