zoukankan      html  css  js  c++  java
  • 【BZOJ 1013】 [JSOI2008]球形空间产生器sphere

    【题目链接】:http://www.lydsy.com/JudgeOnline/problem.php?id=1013

    【题意】

    【题解】

    /*
        考虑圆上的第一个坐标(a1,a2...an);
        设球心的坐标为(x1,x2..xn)
        则有
        (a1-x1)^2+(a2-x2)^2+...+(an-xn)^2==r^2  ····①
        再找圆上的第二个坐标(b1,b2..bn);
        (b1-x1)^2+(b2-x2)^2+...+(bn-xn)^2==r^2  ····②
        联立①②两式可得
        2*(a1-b1)*x1+2*(a2-b2)*x2+...+2*(an-bn)*xn=a1^2-b1^2+a2^-b2^2+...+an^-bn^2
        你可以再找n-1个式子;
        就能组合成n个等式了;
        解非齐次线性方程组就可以了;
        用到了高斯消元;
        这里的高斯消元最后会变成最简的阶梯行列式;
        ->不知道是不是叫这个东西,总之主对角线上的元素都为1,其他地方都为0;
    */


    【完整代码】

    #include <bits/stdc++.h>
    using namespace std;
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define mp make_pair
    #define pb push_back
    #define fi first
    #define se second
    #define rei(x) scanf("%d",&x)
    #define rel(x) scanf("%lld",&x)
    
    typedef pair<int, int> pii;
    typedef pair<LL, LL> pll;
    
    const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1 };
    const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1 };
    const double pi = acos(-1.0);
    const int N = 110;
    
    int n;
    double f[N],a[N][N];
    
    double sqr(double x) 
    {
        return x*x;
    }
    
    void gause()
    {
        rep1(j, 1, n)
        {
            int po = -1;
            rep1(i,j,n)
                if (fabs(a[i][j]) > 1e-6)
                {
                    po = j;
                    break;
                }
            if (po != j)
            {
                rep1(i, 1, n + 1)
                    swap(a[po][i], a[j][i]);
            }
            //a[j][j..n]
            double t = a[j][j];
            rep1(i, 1, n + 1)
                a[j][i] /= t;
            rep1(i,1,n)
                if (i != j)
                {
                    double tt = a[i][j];
                    rep1(k, 1, n + 1)
                        a[i][k] -= tt*a[j][k];
                }
        }
    }
    
    int main()
    {
        //freopen("F:\rush.txt", "r", stdin);
        rei(n);
        rep1(i, 1, n)
            cin >> f[i];
        rep1(i, 1, n)
            rep1(j, 1, n)
            {
                double x;
                cin >> x;
                a[i][j] = 2 * (f[j] - x);
                a[i][n + 1] += sqr(f[j]) - sqr(x);
            }
        gause();
        rep1(i, 1, n - 1)
            printf("%.3f ", a[i][n + 1]);
        printf("%.3f
    ", a[n][n + 1]);
        return 0;
    }
  • 相关阅读:
    php将字符串形式的数组转化为真数组
    Mysql8.0及以上 only_full_group_by以及其他关于sql_mode原因报错详细解决方案
    php使用base64_encode和base64_decode对数据进行编码和解码
    大数据基本概念
    sonarqube安装部署
    git-修改commit信息
    NLP-Commen Sense
    索引生命周期的管理
    kibana软件具体参数配置信息
    es机器监控x-pack导致的监控存储过大的问题
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626592.html
Copyright © 2011-2022 走看看