zoukankan      html  css  js  c++  java
  • bzoj1013 [ JSOI2008 ] -- 高斯消元

    得到n+1个方程:

    (a1 1-x1)2+(a1 2-x2)2+..+(a1 n-xn)2=r2

    (a2 1-x1)2+(a2 2-x2)2+..+(a2 n-xn)2=r2

    ...

    (an+1 1-x1)2+(an+1 2-x2)2+..+(an+1 n-xn)2=r2

    将后n个方程减去第一个方程就能到得到n个n个未知数的线性方程,高斯消元即可。

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 using namespace std;
     6 #define N 20
     7 double a[N][N],b[N],x;
     8 int i,j,k,n,m;
     9 inline void Guass(){
    10     for(int i=1;i<=n;i++){
    11         double Ma=-1;int x;
    12         for(int j=i;j<=n;j++)if(fabs(a[j][i])>Ma)Ma=fabs(a[j][i]),x=j;
    13         if(x!=i)for(int j=1;j<=n+1;j++)swap(a[i][j],a[x][j]);
    14         double t=a[i][i];
    15         for(int j=1;j<=n+1;j++)a[i][j]/=t;
    16         for(int j=1;j<=n;j++)
    17         if(i!=j){
    18             double t=a[j][i];
    19             for(int k=1;k<=n+1;k++)
    20             a[j][k]-=t*a[i][k];
    21         }
    22     }
    23 }
    24 int main()
    25 {
    26     scanf("%d",&n);
    27     for(i=1;i<=n;i++)scanf("%lf",&b[i]);
    28     for(i=1;i<=n;i++){
    29         for(j=1;j<=n;j++)
    30         scanf("%lf",&x),a[i][j]=(x-b[j])*2,a[i][n+1]+=x*x-b[j]*b[j];
    31     }
    32     Guass();
    33     for(printf("%.3lf",a[1][n+1]),i=2;i<=n;i++)printf(" %.3lf",a[i][n+1]);
    34     return 0;
    35 }
    bzoj1013
  • 相关阅读:
    Struts2.5 利用Ajax将json数据传值到JSP
    io/nio
    Elasticsearch 、 Logstash以及Kibana 分布式日志
    zookeeper
    mybatis
    Kubemetes
    线程池
    @Builder
    jdk命令行工具系列
    什么是分布式事务
  • 原文地址:https://www.cnblogs.com/gjghfd/p/6579475.html
Copyright © 2011-2022 走看看