分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

[JSOI2008] 球形空间产生器sphere

发布时间:2023-09-06 02:31责任编辑:顾先生关键词:暂无标签

题目链接:戳我

很简单啊。。。就是根据题目意思列出n+1个方程来。。。因为是n+1元二次方程组,所以我们用一个方程和其他n个方程列成等式,就可以把球心的二次项消掉了。。。剩下的就是高斯消元了。。。。

为了方便,我们可以让去配平其他n个方程的那个方程是第n+1个。这样好写一点,不容易出锅。。。

代码如下:

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n;double a[15][15],val[15][15],ans[15];int main(){ ???#ifndef ONLINE_JUDGE ???freopen("ce.in","r",stdin); ???#endif ???scanf("%d",&n); ???for(int i=1;i<=n+1;i++) ???????for(int j=1;j<=n;j++) ???????????scanf("%lf",&a[i][j]); ???for(int i=1;i<=n;i++) ???????for(int j=1;j<=n;j++) ???????????val[i][n+1]+=a[n+1][j]*a[n+1][j]-a[i][j]*a[i][j]; ???for(int i=1;i<=n;i++) ???????for(int j=1;j<=n;j++) ???????????val[i][j]=2*(a[n+1][j]-a[i][j]); ???for(int i=1;i<=n;i++) ???{ ???????int cur=i; ???????for(int j=i+1;j<=n;j++) ???????????if(val[cur][i]<val[j][i]) ???????????????cur=j; ???????if(cur!=i) swap(val[i],val[cur]); ???????double div=val[i][i]; ???????for(int j=i;j<=n+1;j++) val[i][j]/=div; ???????for(int j=i+1;j<=n;j++) ???????{ ???????????div=val[j][i]; ???????????for(int k=i;k<=n+1;k++) ???????????????val[j][k]-=div*val[i][k]; ???????} ???} ???for(int i=n;i>=1;i--) ???{ ???????ans[i]=val[i][n+1]; ???????for(int j=i+1;j<=n;j++) ???????????ans[i]-=val[i][j]*ans[j]; ???} ???for(int i=1;i<=n;i++) printf("%.3lf ",ans[i]); ???return 0;}

1A真爽我还是太蒻了

[JSOI2008] 球形空间产生器sphere

原文地址:https://www.cnblogs.com/fengxunling/p/10335488.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved