• 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
  • 相关阅读:
    MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作
    vim使用技巧大全
    virtualbox下centos虚拟机安装增强工具教程和常见错误解决
    python初始化list列表(1维、2维)
    Python中列表(list)、字典(dict)排序的程序
    字符画
    php 过滤器filter_var验证邮箱/url/ip等
    Python3 MySQL 数据库连接
    PHP socket 服务器框架集
    python3 获取int最大值
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/8820780.html
Copyright © 2020-2023  润新知