关闭

[BZOJ 1013] JSOI 2008 球形空间产生器sphere · 高斯消元

标签: 高斯消元
591人阅读 评论(0) 收藏 举报
分类:
预处理以后就是高斯消元模板了,而且还只有唯一解。。。n=2时,设球心是(x,y),则对于任意两个球面上的点(a,b) (c,d),有,化简以后把每两个相邻的点做成一条方程,n+1个点就构成了n个方程。
然后就高斯消元搞起。

然后就没了。

#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <iostream>
#include <cmath>
using namespace std;
#define zero 1e-6
 
int n;
double ans[15],a[15][15],d[15][15];
//a为方程组矩阵 d为读入数据 
 
void init(){
    cin>>n;
    for (int i=1;i<=n+1;i++)
        for (int j=1;j<=n;j++) cin>>d[i][j];
    for (int i=1;i<=n;i++){
        for (int j=1;j<=n;j++) 
            a[i][j] = 2 * (d[i+1][j]-d[i][j]),
            a[i][n+1] += d[i+1][j] * d[i+1][j] - d[i][j] * d[i][j];
    }
    memset(ans,0,sizeof ans);
}
 
void gauss(){
    for (int i=1;i<n;i++){
        if (fabs(a[i][i])<zero)      //要保证当前 处理的这项系数不为0 
            for (int j=i+1;j<=n;j++)
                if (abs(a[j][i])>zero){
                    for (int k=1;k<=n+1;k++) swap(a[i][k],a[j][k]);
                    break;
                } 
        for (int j=i+1;j<=n;j++){
            double x = a[j][i] / a[i][i];
            for (int k=i;k<=n+1;k++) a[j][k] -= a[i][k] * x;
        }
    }
    ans[n]=a[n][n+1]/a[n][n];
    for (int i=n-1;i;i--){
        for (int j=i+1;j<=n;j++) a[i][n+1] -= ans[j]*a[i][j];
        ans[i] = a[i][n+1] / a[i][i];
    }
}
 
void print(){
    for (int i=1;i<n;i++) printf("%.3lf ",ans[i]);
    printf("%.3lf\n",ans[n]);
}
 
int main(){
    init();
    gauss();
    print();
    return 0;
}


1
0
查看评论

bzoj1013: [JSOI2008]球形空间产生器sphere

传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1013 思路:肯定是解方程... 好像有哪里不对,二次项很坑爹。 但是题目里有n+1个点,我们还是可以得出n个一次方程的 设球心坐标为(x1,x2,x3...xn) 那么就有 ...
  • thy_asdf
  • thy_asdf
  • 2015-07-29 15:04
  • 867

【高斯消元】【JSOI 2008】【bzoj 1013】球形空间产生器sphere

1013: [JSOI2008]球形空间产生器sphereTime Limit: 1 Sec Memory Limit: 162 MB Submit: 3211 Solved: 1685 Description有一个球形空间产生器能够在n维空间中产生一个坚硬的球体。现在,你被困在了这个n维球体中...
  • morestep
  • morestep
  • 2015-08-30 15:28
  • 800

BZOJ 1013 球形空间产生器sphere 高斯消元

题意:n维空间,给出n+1个点的坐标 求出圆心坐标.n 根据两点距离列出n+1个方程,两个方程相减,消去未知半径和平方项后, 剩下n个方程n个未知数,高斯消元即可. #include using namespace std; typedef long long ll; const dou...
  • noone0
  • noone0
  • 2017-08-26 07:38
  • 50

BZOJ 1013 球形空间产生器sphere(高斯消元)

Description有一个球形空间产生器能够在nn维空间中产生一个坚硬的球体。现在,你被困在了这个nn维球体中,你只知道球 面上n+1n+1个点的坐标,你需要以最快的速度确定这个nn维球体的球心坐标,以便于摧毁这个球形空间产生器。Input第一行是一个整数n(1≤n≤10)n(1\le n\le...
  • V5ZSQ
  • V5ZSQ
  • 2017-12-22 11:03
  • 82

【bzoj 1013】 [JSOI2008] 球形空间产生器sphere(高斯消元)

横一支玉笛唇旁,叹秋月飞花散作烟
  • reverie_mjp
  • reverie_mjp
  • 2016-04-23 21:24
  • 304

【BZOJ 1013】【JSOI 2008】球形空间产生器sphere

高斯消元裸题,设球的一般方程为a^2+b^2+c^2+...+z^2+Aa+Bb+Cc+...+Zz=常数,求解即可code: 球心坐标为(A/-2,B/-2,C/-2,...,Z/-2) #include #include #include #include using namespace...
  • Lcomyn
  • Lcomyn
  • 2015-02-15 19:54
  • 469

1013: [JSOI2008]球形空间产生器sphere (高斯消元)

#include #include #include #include #define eps 1e-6 using namespace std; int n; double f[21],a[21][21]; double sqr(double x){return x*x;} void ini() ...
  • ndsffx501ccy
  • ndsffx501ccy
  • 2014-07-14 21:21
  • 255

HYSBZ 1013 球形空间产生器sphere(高斯消元)

给定n维空间下的n+1个点,求这n个点所在的球面的球心 我们设球心为X(x1,x2,...,xn) 假设有两点A(a1,a2,...,an)和B(b1,b2,...,bn) 那么我们可以得到两个方程 (x1-a1)^2+(x2-a2)^2+...+(xn-an)^2=r^2 ...
  • lp_opai
  • lp_opai
  • 2015-07-13 09:17
  • 338

1013: [JSOI2008]球形空间产生器sphere(高斯消元)

Description   有一个球形空间产生器能够在n维空间中产生一个坚硬的球体。现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器。 Input   第一行是一个整数n(1 后6位,且...
  • SSimpLe_Y
  • SSimpLe_Y
  • 2017-07-22 17:08
  • 567

【高斯消元】HYSBZ 1013 球形空间产生器sphere

地址 (x1-a1)^2+(x2-a2)^2=(x1-b1)^2+(x-b2)^2 可以得到好多方程 然后解#include <cstdio> #include <cstring> #include <cstdlib> #include <string...
  • u012749539
  • u012749539
  • 2015-07-13 15:31
  • 402
    个人资料
    • 访问:58770次
    • 积分:1582
    • 等级:
    • 排名:千里之外
    • 原创:102篇
    • 转载:2篇
    • 译文:0篇
    • 评论:11条
    Latex在线公式编辑器
    快点我
    最新评论