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

洛谷题目传送门

球啊球 @xzz_233 qaq

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

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

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

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

想想圆的标准方程(xx0)2+(yy0)2=r2,除了圆心坐标,半径不也对这个圆起到决定性作用么?

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

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

(a1x1)2+(a2x2)2+···+(anxn)2=r2

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

a122a1x1+x12+a222a2x2+x22+···+an22anxn+xn2=r2

2a1x1+2a2x2+···+2anxn+r2x12x22···xn2=a12+a22+···+an2

发现r2x12x22···xn2a无关,所以考虑换元,设t=r2x12x22···xn2(实际上我们并不用求r

终于,我们可以看到一个关于x1,x2,···,xn,t(n+1)元方程组了,上高斯消元

具体实现看代码

#include<cmath>
#include<cstdio>
#define R register
#define init for(i=1;i<=n;++i)ne[i-1]=pr[i+1]=i
const int N=19;
int p[N],pr[N],ne[N];
double a[N][N];
int main(){
    R int n,i,j,k,x;
    R double mx,d;
    scanf("%d",&n);++n;
    init;//链表初始化,为了实现交换行
    for(i=1;i<=n;++i){
        for(j=1;j<n;++j){
            scanf("%lf",&d);//处理系数
            a[i][j]=d*2;a[i][n+1]+=d*d;
        }
        a[i][n]=1;//t的系数为1
    }
    for(k=1;k<=n;++k){
        mx=0;//蒟蒻没有交换主元,而是交换行
                //这样做防掉精度的效果可能不如交换主元
        for(i=ne[0];i;i=ne[i])
            if(mx<fabs(a[i][k]))
                mx=fabs(a[i][k]),x=i;
        d=a[p[k]=x][k];//选择当前a最大的一行
        pr[ne[pr[x]]=ne[x]]=pr[x];
        for(j=1;j<=n+1;++j)
            a[x][j]/=d;
        for(i=ne[0];i;i=ne[i])
            for(d=a[i][j=k];j<=n+1;++j)
                a[i][j]-=d*a[x][j];
    }//高斯消元
    init;
    for(k=n;k;--k){
        d=a[x=p[k]][n+1];
        pr[ne[pr[x]]=ne[x]]=pr[x];
        for(i=ne[0];i;i=ne[i])
            a[i][n+1]-=d*a[i][k];
    }//回代
    for(k=1;k<n;++k)
        printf("%.3f ",a[p[k]][n+1]);
    puts("");
    return 0;
}
posted @   Flash_Hu  阅读(199)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示
剑桥
17:14发布
剑桥
17:14发布
5°
西风
7级
空气质量
相对湿度
34%
今天
多云
-3°/5°
周六
-1°/3°
周日
-2°/7°