zoukankan      html  css  js  c++  java
  • [SDOI2006] 线性方程组

    洛谷 P2455 传送门

    刚开始写了个消成上三角的,结果狂wa。

    后来经过研究发现,消成上三角那种不能直接判断无解或无穷多解,需要其它的操作。

    所以干脆学了个消成对角线的,写了一发A了。

    其实两种消元的方法都差不多,就当存个板子吧。

     1 #include<cstdio>
     2 
     3 void swap(double &x,double &y)
     4 {
     5     double t=x;x=y;y=t;
     6 }
     7 
     8 double v(double rx)
     9 {
    10     return rx>0?rx:(-rx);
    11 }
    12 
    13 int n;
    14 double a[55][55];
    15 double x[55];
    16 const double eps=0.00001;
    17 
    18 int main()
    19 {
    20     scanf("%d",&n);
    21     for(int i=1;i<=n;i++)
    22         for(int j=1;j<=n+1;j++)
    23             scanf("%lf",&a[i][j]);
    24     for(int i=1;i<=n;i++)
    25     {
    26         int p=i;
    27         for(int j=i+1;j<=n;j++)
    28             if(v(a[j][i])>v(a[p][i]))p=j;
    29         if(i!=p)for(int j=i;j<=n+1;j++)swap(a[i][j],a[p][j]);
    30         if(v(a[i][i])<eps)continue;
    31         double div=a[i][i];
    32         for(int j=i;j<=n+1;j++)a[i][j]/=div;
    33         for(int j=1;j<=n;j++)
    34         {
    35             if(i==j)continue;
    36             double div=a[j][i];
    37             for(int k=1;k<=n+1;k++)
    38                 a[j][k]-=div*a[i][k];
    39         }
    40     }
    41     int no=0,inf=0;
    42     for(int i=1;i<=n;i++)
    43     {
    44         int p=1;
    45         while(p<=n+1&&v(a[i][p])<=eps)p++;
    46         if(p==n+1)no=1;
    47         if(p>n+1)inf=1;
    48     }
    49     if(no){printf("-1");return 0;}
    50     if(inf){printf("0");return 0;}
    51     for(int i=n;i;i--)x[i]=a[i][n+1];
    52     for(int i=1;i<=n;i++)
    53         printf("x%d=%.2lf
    ",i,x[i]);
    54     return 0;
    55 }
  • 相关阅读:
    C# 动态加载卸载 DLL
    C# 判断文件编码
    win10 uwp 如何拖动一个TextBlock的文字到另一个TextBlock
    C# TextBlock 上标
    PHP curl_getinfo函数
    PHP curl_file_create函数
    PHP curl_errno函数
    PHP curl_error函数
    PHP curl_escape函数
    PostgreSQL Schema
  • 原文地址:https://www.cnblogs.com/cervusy/p/9922628.html
Copyright © 2011-2022 走看看