WA#4#8求助

P2455 [SDOI2006] 线性方程组

JS_TZ_ZHR @ 2020-03-27 21:37:25

RT

#include <bits/stdc++.h>
int n,maxx;
double x[105][105],ans[105];
inline double _abs(double a) {
    return a>0?a:-a;
}
int main() {
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n+1; j++)
            scanf("%lf",&x[i][j]);
    for(int i=1; i<=n; i++) {
        maxx=i;
        for(int j=i+1; j<=n; j++)
            if(_abs(x[maxx][i])<_abs(x[j][i]))maxx=j;
        if(_abs(x[maxx][i])<1e-8) {
            if(x[i][n+1]!=0)
                puts("-1");
            else
                puts("0");
            return 0;
        }
        std::swap(x[i],x[maxx]);
        double a=x[i][i];
        for(int j=1; j<=n+1; j++)x[i][j]/=a;
        for(int j=i+1; j<=n; j++) {
            a=x[j][i];
            for(int k=1; k<=n+1; k++)
                x[j][k]-=x[i][k]*a;
        }
    }
    for(int i=n; i>=1; i--) {
        ans[i]=x[i][n+1];
        for(int j=1; j<i; j++)
            x[j][n+1]-=ans[i]*x[j][i];
    }
    for(int i=1; i<=n; i++)printf("x%d=%.2lf\n",i,ans[i]);
}

|