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

    题目链接:戳我

    很简单啊。。。就是根据题目意思列出n+1个方程来。。。因为是n+1元二次方程组,所以我们用一个方程和其他n个方程列成等式,就可以把球心的二次项消掉了。。。剩下的就是高斯消元了。。。。

    为了方便,我们可以让去配平其他n个方程的那个方程是第n+1个。这样好写一点,不容易出锅。。。

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int n;
    double a[15][15],val[15][15],ans[15];
    int main()
    {
        #ifndef ONLINE_JUDGE
        freopen("ce.in","r",stdin);
        #endif
        scanf("%d",&n);
        for(int i=1;i<=n+1;i++)
            for(int j=1;j<=n;j++)
                scanf("%lf",&a[i][j]);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                val[i][n+1]+=a[n+1][j]*a[n+1][j]-a[i][j]*a[i][j];
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                val[i][j]=2*(a[n+1][j]-a[i][j]);
        for(int i=1;i<=n;i++)
        {
            int cur=i;
            for(int j=i+1;j<=n;j++)
                if(val[cur][i]<val[j][i])
                    cur=j;
            if(cur!=i) swap(val[i],val[cur]);
            double div=val[i][i];
            for(int j=i;j<=n+1;j++) val[i][j]/=div;
            for(int j=i+1;j<=n;j++)
            {
                div=val[j][i];
                for(int k=i;k<=n+1;k++)
                    val[j][k]-=div*val[i][k];
            }
        }
        for(int i=n;i>=1;i--)
        {
            ans[i]=val[i][n+1];
            for(int j=i+1;j<=n;j++)
                ans[i]-=val[i][j]*ans[j];
        }
        for(int i=1;i<=n;i++) printf("%.3lf ",ans[i]);
        return 0;
    }
    

    1A真爽我还是太蒻了

  • 相关阅读:
    The bean ‘XXXXX.FeignClientSpecification‘ could not be registered.
    爱数产品
    RSA加解密时报algid parse error, not a sequence错误
    PostgreSQL 查看数据库,索引,表,表空间大小
    Vue3工程示例
    Vue3工程用Vue2示例
    Vue工程添加组件调用
    Vue 项目结构
    命令行创建Vue项目
    Vue 自定义指令
  • 原文地址:https://www.cnblogs.com/fengxunling/p/10335488.html
Copyright © 2011-2022 走看看