zoukankan      html  css  js  c++  java
  • bzoj1013: [JSOI2008]球形空间产生器sphere

    有一个球形空间产生器能够在n维空间中产生一个坚硬的球体。现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器。

    高斯消元板子题,自己手写的高斯消元,把n个方程列出来即可,每两个点确定一个方程,因为r是未知的

    /**************************************************************
        Problem: 1013
        User: walfy
        Language: C++
        Result: Accepted
        Time:84 ms
        Memory:1476 kb
    ****************************************************************/
     
    //#pragma comment(linker, "/stack:200000000")
    //#pragma GCC optimize("Ofast,no-stack-protector")
    //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
    //#pragma GCC optimize("unroll-loops")
    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define C 0.5772156649
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #define pil pair<int,ll>
    #define pli pair<ll,int>
    #define pii pair<int,int>
    #define cd complex<double>
    #define ull unsigned long long
    #define base 1000000000000000000
    #define fio ios::sync_with_stdio(false);cin.tie(0)
     
    using namespace std;
     
    const double g=10.0,eps=1e-12;
    const int N=100+10,maxn=8000000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
     
    double A[N][N],ans[N],x[N][N];
    void solve(int n)
    {
        for(int i=1;i<n;i++)
        {
            for(int j=i+1;j<=n;j++)
            {
                if(A[i][i]!=0)
                {
                    double t=A[j][i]/A[i][i];
                    for(int k=i;k<=n+1;k++)
                        A[j][k]-=(A[i][k]*t);
                }
            }
        }
    //    for(int i=1;i<=n;i++)
    //    {
    //        for(int j=1;j<=n+1;j++)
    //            printf("%.12f ",A[i][j]);
    //        puts("");
    //    }
        for(int i=n;i>=1;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];
        }
        for(int i=1;i<=n;i++)printf("%.3f ",ans[i]);
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n+1;i++)
            for(int j=1;j<=n;j++)
                scanf("%lf",&x[i][j]);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                A[i][j]=2*(x[i+1][j]-x[i][j]);
                A[i][n+1]+=x[i+1][j]*x[i+1][j]-x[i][j]*x[i][j];
            }
        }
        solve(n);
        return 0;
    }
    /********************
     
    ********************/
    View Code
  • 相关阅读:
    apache安全—用户访问控制
    hdu 3232 Crossing Rivers 过河(数学期望)
    HDU 5418 Victor and World (可重复走的TSP问题,状压dp)
    UVA 11020 Efficient Solutions (BST,Splay树)
    UVA 11922 Permutation Transformer (Splay树)
    HYSBZ 1208 宠物收养所 (Splay树)
    HYSBZ 1503 郁闷的出纳员 (Splay树)
    HDU 5416 CRB and Tree (技巧)
    HDU 5414 CRB and String (字符串,模拟)
    HDU 5410 CRB and His Birthday (01背包,完全背包,混合)
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/8820780.html
Copyright © 2011-2022 走看看