洛谷题目传送门

球啊球 @xzz_233 qaq

高斯消元模板题,关键在于将已知条件转化为方程组。

可以发现题目要求的未知量有\(n\)个,题目却给了我们\(n+1\)个点的坐标,这其中必有玄机。

由高中数学知识可以知道,三点定圆(二维),四点定球(三维)······以此类推,应该是\(n+1\)个点才能确定一个\(n\)维空间下的球。

那么隐藏的另一个关键未知量在哪里呢?

想想圆的标准方程\((x-x_0)^2+(y-y_0)^2=r^2\),除了圆心坐标,半径不也对这个圆起到决定性作用么?

接下来,额外设一个未知量——球的半径\(r\),开始试着对条件式进行变换。

对于\(n+1\)个点,它们与球心的距离是定值\(r\),那么我们可以得到形式如下的\(n+1\)个方程(a为球面点坐标,x为球心坐标)

\[(a_1-x_1)^2+(a_2-x_2)^2+···+(a_n-x_n)^2=r^2
\]

显然我们要把已知量和未知量分开,于是展开,移项

\[a_1^2-2a_1x_1+x_1^2+a_2^2-2a_2x_2+x_2^2+···+a_n^2-2a_nx_n+x_n^2=r^2
\]

\[2a_1x_1+2a_2x_2+···+2a_nx_n+r^2-x_1^2-x_2^2-···-x_n^2=a_1^2+a_2^2+···+a_n^2
\]

发现\(r^2-x_1^2-x_2^2-···-x_n^2\)与\(a\)无关,所以考虑换元,设\(t=r^2-x_1^2-x_2^2-···-x_n^2\)(实际上我们并不用求\(r\))

终于,我们可以看到一个关于\(x_1,x_2,···,x_n,t\)的\((n+1)\)元方程组了,上高斯消元

具体实现看代码

  1. #include<cmath>
  2. #include<cstdio>
  3. #define R register
  4. #define init for(i=1;i<=n;++i)ne[i-1]=pr[i+1]=i
  5. const int N=19;
  6. int p[N],pr[N],ne[N];
  7. double a[N][N];
  8. int main(){
  9. R int n,i,j,k,x;
  10. R double mx,d;
  11. scanf("%d",&n);++n;
  12. init;//链表初始化,为了实现交换行
  13. for(i=1;i<=n;++i){
  14. for(j=1;j<n;++j){
  15. scanf("%lf",&d);//处理系数
  16. a[i][j]=d*2;a[i][n+1]+=d*d;
  17. }
  18. a[i][n]=1;//t的系数为1
  19. }
  20. for(k=1;k<=n;++k){
  21. mx=0;//蒟蒻没有交换主元,而是交换行
  22. //这样做防掉精度的效果可能不如交换主元
  23. for(i=ne[0];i;i=ne[i])
  24. if(mx<fabs(a[i][k]))
  25. mx=fabs(a[i][k]),x=i;
  26. d=a[p[k]=x][k];//选择当前a最大的一行
  27. pr[ne[pr[x]]=ne[x]]=pr[x];
  28. for(j=1;j<=n+1;++j)
  29. a[x][j]/=d;
  30. for(i=ne[0];i;i=ne[i])
  31. for(d=a[i][j=k];j<=n+1;++j)
  32. a[i][j]-=d*a[x][j];
  33. }//高斯消元
  34. init;
  35. for(k=n;k;--k){
  36. d=a[x=p[k]][n+1];
  37. pr[ne[pr[x]]=ne[x]]=pr[x];
  38. for(i=ne[0];i;i=ne[i])
  39. a[i][n+1]-=d*a[i][k];
  40. }//回代
  41. for(k=1;k<n;++k)
  42. printf("%.3f ",a[p[k]][n+1]);
  43. puts("");
  44. return 0;
  45. }

洛谷P4035 [JSOI2008]球形空间产生器(高斯消元)的更多相关文章

  1. [洛谷P4035][JSOI2008]球形空间产生器

    题目大意:给你$n$个点坐标,要你求出圆心 题解:随机化,可以随机一个点当圆心,然后和每个点比较,求出平均距离$r$,如果到这个点的距离大于$r$,说明离这个点远了,就给圆心施加一个向这个点的力:若小 ...

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

    题目链接 HDU3571 //824kb 40ms //HDU3571弱化版 跟那个一比这个太水了,练模板吧. //列出$n+1$个二次方程后两两相减,就都是一次方程了. #include <c ...

  3. 洛谷4035 JSOI2008球形空间产生器 (列柿子+高斯消元)

    题目链接 qwq 首先看到这个题,感觉就应该从列方程入手. 我们设给定的点的坐标矩阵是\(x\),然后球心坐标\(a_1,a_2....a_n\) 根据欧几里得距离公式,对于一个\(n维空间\)的第\ ...

  4. 洛谷 4035 [JSOI2008]球形空间产生器

    题目戳这里 一句话题意 给你 n+1 个 n 维点,需要你求出这个n维球的球心.(n<=10) Solution 这个题目N维的话确实不好想,反正三维就已经把我搞懵了,所以只好拿二维类比. 首先 ...

  5. 【BZOJ1013】【JSOI2008】球形空间产生器 高斯消元

    题目描述 有一个\(n\)维空间中的球,告诉你球面上\(n+1\)个点的坐标,求球心的坐标. \(n\leq 10\) 题解 设\(a_{i,j}\)为第\(i\)个点的第\(j\)维坐标,\(i=0 ...

  6. 洛谷P4783 【模板】矩阵求逆(高斯消元)

    题意 题目链接 Sol 首先在原矩阵的右侧放一个单位矩阵 对左侧的矩阵高斯消元 右侧的矩阵即为逆矩阵 // luogu-judger-enable-o2 #include<bits/stdc++ ...

  7. 洛谷P3232 [HNOI2013]游走(高斯消元+期望)

    传送门 所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了…… 首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号 边的期望次 ...

  8. 洛谷 P6030 - [SDOI2012]走迷宫(高斯消元+SCC 缩点)

    题面传送门 之所以写个题解是因为题解区大部分题解的做法都有 bug(u1s1 周六上午在讨论区里连发两个 hack 的是我,由于我被禁言才让 ycx 代发的) 首先碰到这种期望题,我们套路地设 \(d ...

  9. LG4035/BZOJ1013 「JSOI2008」球形空间产生器 高斯消元

    问题描述 LG4035 BZOJ1013 题解 设答案为\((p_1,p_2,p_3,...,p_n)\) 因为是一个球体,令其半径为\(r\),则有 \[\sum_{i=1}^{n}{(a_i-p_ ...

随机推荐

  1. 解决Oracle登录极慢的问题

    原文首发 http://anforen.com/wp/2018/04/oracle_login_slowly/ Oracle用PL/SQL登录,特别慢,3分钟以上,如果以前正常,并且按常见问题排查过, ...

  2. Luogu P1129 [ZJOI2007]矩阵游戏

    题目意思还是比较直观的,而且这个建模的套路也很明显. 我们首先考虑从主对角线可以转移到哪些状态. 由于每一次操作都不会把同一行(列)的黑色方块分开.因此我们发现: 只要找出\(n\)个黑色棋子,让它们 ...

  3. (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)

    @翻译:huangyongye 原文链接: Understanding LSTM Networks 前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LST ...

  4. Zookeeper Windows版的服务安装和管理工具

    以前研究过负载均衡,最近正在项目上实施(从来没做过小项目以上级别的东西,哈).然后遇到了多个一模一样但是同时运行的服务.不同服务但依赖同相同的配置数据(前端网页服务:Nginx+IIS+nodejs. ...

  5. Windows环境下实现Consul服务注册和服务发现

    1.首先从官方网站下载Consul,因为我们是使用的Windows系统,所以选择windows版本 https://www.consul.io/downloads.html 2.可以用开发者模式来启动 ...

  6. WPF开发汽车采样机上位机软件

    由于项目需要,需开发同一套汽车.火车.皮带采样机的上位机软件. 看过之前的上位机软件,老版本都是DelPhi.VB开发,稍微新语言开发的是采用winform开发.要不就是使用组态软件. Delphi语 ...

  7. SpringBoot日记——分布式篇

    思考:什么是分布式?什么是微服务? 一些概念:RPC-远程过程调用,某台机器想要调用另一台机器所需要的一种服务,及分布式的服务框架,比如dubbo或者SpringCloud. 铺天盖地的分布式互联网系 ...

  8. CentOS 网卡自动启动、配置等ifcfg-eth0教程

    装完centos后发现网卡没有自动启动, vi /etc/sysconfig/network-scripts/ifcfg-eth0 将ONBOOT=no 改为yes即可 原文链接: http://yp ...

  9. Linux第五周学习总结

    作者:黎静 一.知识点总结 (一)给MenuOS增加time和time-asm命令 1.更新menu代码到最新版 2.test.c中main函数里,增加MenuConfig() 3.增加对应的两个函数 ...

  10. 同步手绘板——json

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...