zoukankan      html  css  js  c++  java
  • Luogu P2455 [SDOI2006]线性方程组 真•高斯消元板子

    果然如Miracle学长所说。。。调了一天。。。qwq。。还是过不了线下的Hack

    upd after 40min:刚刚过了


    就是多了一个判无解的操作。。。

    当系数都为0,且常数项不为0时,即为无解。

    当找到自由元时,不能跳过这一行。。。否则会被Hack,见洛谷讨论

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #define R register int
    using namespace std;
    const double eps=1E-6;
    inline int g() {
        R ret=0,fix=1; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-1:fix;
        do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret*fix;
    }
    long double a[55][55];
    int n,m,k;
    inline bool ck0(double x) {return x<eps&&x>-eps;}
    inline void Gauss() {
        for(R i=1,pos=1;i<=n&&pos<=n;++i) { R p;
            for(p=pos;p<=n&&ck0(a[p][i]);++p) ;
            if(p==n+1) continue;
            if(pos!=p) for(R j=1;j<=n+1;++j) swap(a[pos][j],a[p][j]);
            for(R j=pos+1;j<=n;++j) if(!ck0(a[j][i])){
                register long double t=a[j][i]/a[pos][i];
                for(R k=1;k<=n+1;++k) a[j][k]-=a[pos][k]*t;
            } ++pos;
        } register bool flg1=false,flg2=false;
        for(R i=1;i<=n;++i) { R j=1;
            while(ck0(a[i][j])&&j<=n+1) ++j;
            if(j==n+1) flg1=true;
            if(j>n+1) flg2=true;
        } if(flg1) {putchar('-'),putchar('1'); return ;}
        if(flg2) {putchar('0'); return ;}
        for(R i=n;i>=1;--i) {
            for(R j=n;j>=i+1;--j) a[i][n+1]-=a[i][j]*a[j][n+1];
            a[i][n+1]/=a[i][i];
        } for(R i=1;i<=n;++i) if(ck0(a[i][n+1])) printf("x%d=0
    ",i); else printf("x%d=%.2Lf
    ",i,a[i][n+1]);
    }
    signed main() {
        n=g(); for(R i=1;i<=n;++i) for(R j=1;j<=n+1;++j) a[i][j]=g(); Gauss(); //while(1);
    }

    2019.05.13

  • 相关阅读:
    常见的排序算法--java版
    使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
    在JAVA中如何跳出当前的多重嵌套循环
    说说&和&&的区别
    家族/亲戚(relation)
    面积(area)
    珍珠(bead)
    N皇后问题
    纪念品分组 2007年NOIP全国联赛普及组
    二叉树的序遍历
  • 原文地址:https://www.cnblogs.com/Jackpei/p/10859309.html
Copyright © 2011-2022 走看看