码迷,mamicode.com
首页 > Web开发 > 详细

bzoj1013-[JSOI2008]球形空间产生器

时间:2018-10-22 15:00:18      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:return   main   include   ace   jsoi2008   ==   define   long   产生   

高斯小圆。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
using namespace std;
#define rep(i,l,r) for(register int i=(l);i<=(r);++i)
#define repdo(i,l,r) for(register int i=(l);i>=(r);--i)
#define il inline
typedef double db;
typedef long long ll;

//---------------------------------------
const int nsz=25;
const db eps=1e-8;
int n;
db line[nsz][nsz],a[nsz][nsz],ans[nsz];
int gauss(){
    int p0;
    db tmp;
    rep(i,1,n){
        p0=i;
        rep(j,i+1,n)if(fabs(a[p0][i])<fabs(a[j][i]))p0=j;
        if(p0!=i)rep(j,1,n+1)swap(a[i][j],a[p0][j]);
        if(fabs(a[i][i])<eps)return 0;
        rep(j,1,n){
            if(j==i)continue;
            tmp=a[j][i]/a[i][i];
            rep(k,i+1,n+1)a[j][k]-=a[i][k]*tmp;
        }
    }
    rep(i,1,n)a[i][n+1]/=a[i][i],ans[i]=a[i][n+1];
    return 1;
}
il db p2(db v){return v*v;}
void sol(){
    rep(i,2,n+1){
        rep(j,1,n){
            a[i-1][j]+=2*(line[i][j]-line[1][j]);
            a[i-1][n+1]+=p2(line[i][j])-p2(line[1][j]);
        }
    }
    gauss();
}
int main(){
    ios::sync_with_stdio(0),cin.tie(0);
    cin>>n;
    rep(i,1,n+1)rep(j,1,n)cin>>line[i][j];
    sol();
    rep(i,1,n)printf("%.3lf ",ans[i]);
    return 0;
}

bzoj1013-[JSOI2008]球形空间产生器

标签:return   main   include   ace   jsoi2008   ==   define   long   产生   

原文地址:https://www.cnblogs.com/ubospica/p/9829508.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!