Cod sursa(job #2582943)

Utilizator andreisontea01Andrei Sontea andreisontea01 Data 17 martie 2020 15:37:53
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 305;

#define EPS 1e-10

double a[MAXN][MAXN], ans[MAXN];

int main()
{
    ifstream fin("gauss.in");
    ofstream fout("gauss.out");
    int n, m;
    fin >> n >> m;
    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= m + 1; ++j)
            fin >> a[i][j];
    }
    int lin = 1, col = 1;
    while(lin <= n && col <= m){
        int best = lin;
        while(best <= n && fabs(a[best][col]) < EPS) best++;
        if(best > n){
            col++;
            continue;
        }
        if(best > lin)
            for(int j = 1; j <= m + 1; ++j) swap(a[lin][j], a[best][j]);
        for(int j = m + 1; j >= col; --j) a[lin][j] /= a[lin][col];
        for(int i = lin + 1; i <= n; ++i){
            for(int j = m + 1; j >= col; --j)
                a[i][j] -= a[lin][j] * a[i][col];
        }
        lin++;
        col++;
    }
    for(int i = n; i >= 1; --i){
        int pi = 1;
        while(pi <= m && fabs(a[i][pi]) < EPS) pi++;
        if(pi == m + 1 && fabs(a[i][m + 1]) > EPS){
            fout << "Imposibil";
            return 0;
        }
        ans[pi] = a[i][m + 1];
        for(int j = pi + 1; j <= m; ++j) ans[pi] -= ans[j] * a[i][j];
    }
    for(int i = 1; i <= m; ++i)
        fout << fixed << setprecision(10) << ans[i] << " ";
    return 0;
}