Cod sursa(job #2691041)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 26 decembrie 2020 20:01:07
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("gauss.in");
ofstream fout ("gauss.out");
const double epss = 1e-10;
int m, n;
double v [303][303], ans [303];
int main (){
    fin >> n >> m;
    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= m + 1; j ++)
            fin >> v [i][j];
    for (int i = 1, j = 1; i <= n && j <= m; i ++, j ++){
        for (int k = i; k <= n; k ++){
            if (v [k][j] < -epss || v [k][j] > epss){
                for (int u = 1; u <= m + 1; u ++)
                    swap(v[k][u], v[i][u]);
            }
        }
        if (v [i][j] >= -epss && v[i][j] <= epss){
            i --; continue;
        }
        for (int u = j + 1; u <= m + 1; u ++)
            v [i][u] /= v [i][j];
        v [i][j] = 1;
        for (int k = i + 1; k <= n; k ++){
            for (int u = j + 1; u <= m + 1; u ++)
                v [k][u] -= v [k][j] * v [i][u];
            v [k][j] = 0;
        }
    }
    for (int i = n; i >= 0; i --){
        for (int j = 1; j <= m + 1; j ++){
            if (v [i][j] >= -epss && v [i][j] <= epss)
                continue;
            if (j == m + 1) {
                fout << "Imposibil";
                return 0;
            }
            ans [j] = v [i][m + 1];
            for (int k = j + 1; k <= m; k ++)
                ans [j] -= v [i][k] * ans [k];
            break;
        }
    }
    for (int i = 1; i <= m; i ++)
        fout << setprecision(10) << fixed << ans[i] << " ";
    return 0;

}