当前位置: 首页 > news >正文

Luogu P4035 [JSOI2008] 球形空间产生器 题解

前言

题目传送门 Luogu P4035 [JSOI2008] 球形空间产生器

这回真是模板题了。

题意简述

有一个 \(n(n\le 10)\) 维球体,给定该球面上的 \(n+1\) 个点的坐标,求球心的坐标(\(n\) 个实数)。答案保留三位小数。

思路

不难看出,本题肯定是要求解一个线性方程组的。问题在于怎么列出这个方程组。我们从二维的情况开始入手分析,设 \(O(p_1, p_2), A(a_1, a_2), B(b_1,b_2), C(c_1,c_2)\) ,于是我们有:

\[\begin{align*} &OA = OB = OC\\ &(p_1-a_1)^2 + (p_2-a_2)^2\\ =&(p_1-b_1)^2 + (p_2-b_2)^2\\ =&(p_1-c_1)^2 + (p_2-c_2)^2 \end{align*} \]

进行一些化简,我们得到这个连等式:

\[\begin{align*} &2p_1a_1-a_1^2+2p_2a_2-a_2^2\\ =&2p_1b_1-b_1^2+2p_2b_2-b_2^2\\ =&2p_1c_1-c_1^2+2p_2c_2-c_2^2 \end{align*} \]

任取两个,移项,我们得到三个关于 \(p_1, p_2\) 的方程。任取两个联立,我们得到以下方程组:(为了方便,我取第一、二和第二、三个联立)

\[\begin{align*} \begin{cases} 2(a_1-b_1)p_1 + 2(a_2-b_2)p_2 = a_1^2 + a_2^2 - b_1^2 - b_2^2\\ 2(b_1-c_1)p_1 + 2(b_2-c_2)p_2 = b_1^2 + b_2^2 - c_1^2 - c_2^2 \end{cases} \end{align*} \]

接下来,我们把所有的系数对应填入增广矩阵,得到如下矩阵:

\[\left[ \begin{array}{cc|c} 2(a_1-b_1) & 2(a_2-b_2) & a_1^2 + a_2^2 - b_1^2 - b_2^2\\ 2(b_1-c_1) & 2(b_2-c_2) & b_1^2 + b_2^2 - c_1^2 - c_2^2\\ \end{array} \right] \]

观察规律,我们也能轻松地把它扩展到 \(n\) 维:

\[\left[ \begin{array}{ccc|c} 2(a_{1,1}-a_{2,1}) & \cdots & 2(a_{1,n}-a_{2,n}) & \sum_{i=1}^n a_{1,i}^2 - a_{2,i}^2\\ \vdots & \ddots & \vdots & \vdots\\ 2(a_{n,1}-a_{n+1,1}) & \cdots & 2(a_{n,n}-a_{n+1,n}) & \sum_{i=1}^n a_{n,i}^2 - a_{n+1,i}^2\\ \end{array} \right] \]

最后,我们把这个矩阵丢给高斯-约旦消元即可。

由于题目保证有解,我们也不需要担心特殊情况。

代码

代码如下。

#include<iostream>
#include<cmath>
#define fastio ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define MIKU 0
using namespace std;const double eps = 1e-7;int n;
double a[15][15], p[2][15];void Gauss() {for(int i=1; i<=n; i++) {int r = i;for(int j=i+1; j<=n; j++) if(fabs(a[j][i]) > fabs(a[r][i])) r = j;if(r != i) swap(a[i], a[r]);double div = a[i][i];for(int j=i; j<=n+1; j++) a[i][j] /= div;for(int j=1; j<=n; j++) {if(j == i) continue;div = a[j][i];for(int k=i; k<=n+1; k++) a[j][k] -= a[i][k] * div;}}
}int main() {fastio;cin>>n;for(int i=1; i<=n; i++) cin>>p[1][i];for(int i=2; i<=n+1; i++) {for(int j=1; j<=n; j++) cin>>p[2][j];double t = 0;for(int j=1; j<=n; j++) {a[i-1][j] = 2 * (p[1][j] - p[2][j]);t += p[1][j] * p[1][j] - p[2][j] * p[2][j];}a[i-1][n+1] = t;swap(p[1], p[2]);}Gauss();for(int i=1; i<=n; i++) printf("%.3lf ", a[i][n+1]);return MIKU;
}
http://www.jsqmd.com/news/407280/

相关文章:

  • DeepSeek 怎么做广告?DeepSeek 推广服务商有哪些? - 品牌2025
  • 舞东方教育:深耕舞蹈艺考三十载 以专业赋能校考冲刺与升学规划 - 深度智识库
  • 上海智推时代:AI 优化、GEO 优化官方合作咨询入口 - 速递信息
  • windows统计目录 - 规格严格
  • 智推时代 GEO 服务:官方咨询通道与对接指引全览 - 速递信息
  • 智推时代 AI 优化服务:官方联络方式与商务对接指南 - 速递信息
  • 2026福州婚姻家事律师推荐:福州抚养权纠纷律师、福州拆迁补偿律师、福州民间借贷律师、福州离婚律师选择指南 - 优质品牌商家
  • Arrays.asList方法踩坑
  • ABB称重传感器PFTL101AER-1.0KN
  • 环球骑行
  • python-django基于人脸识别的智慧医疗预约挂号平台 医生排班
  • 2026年托福机构推荐榜单:新托福时代,谁是最强提分王者? - 速递信息
  • 2026年可靠的货架厂推荐,提供货架厂家直销源头工厂拆装服务 - 工业品牌热点
  • 五个女博士 2026 可信度解析:被国家认可吗|东西怎么样 - 速递信息
  • 2026大数据风口下,中专/大专生如何靠证书逆袭大厂?
  • 精准对接智推时代:官方沟通渠道与咨询入口全面整理 - 速递信息
  • python-django可视化人工智能知识科普平台 ai客服 人脸识别840p03tc
  • 智推时代官方服务:AI 优化与 GEO 优化合作咨询入口 - 速递信息
  • megatron_actor
  • 2026年大理短租民宿推荐:熹庭Villas如何解决家庭度假3大痛点 - 速递信息
  • 2026年植物提取物厂家TOP3推荐:三大苦参碱/花青素厂家优选指南! - 深度智识库
  • 2026 年雅思培训机构推荐榜单TOP10 | 多维度评估 - 速递信息
  • HoRain云--Windows文件名非法字符终极解决指南
  • vue 表格 vxe-table 如何实现拖拽单元格自动复制内容功能
  • 2026中小企业CRM选型攻略:超兔等主流品牌深度对比,精准适配需求 - 毛毛鱼的夏天
  • 智推时代优化服务:官方正规咨询方式与合作流程 - 速递信息
  • 如何使用 vue vxe-table 甘特图 vxe-gantt 渲染显示多行任务,预计完成日期和实际完成日期多条任务条,可以自定义任务条颜色,拖拽调整日期等
  • 2026年主流CRM系统大揭秘:选型要点、落地攻略与核心能力全解析 - 毛毛鱼的夏天
  • 豫味飘香 匠造珍馐——河南鑫味源之源调味品,解锁中国菜的五味密码 - 朴素的承诺
  • 多篇论文要降AI?批量处理选这两款工具最划算