Cod sursa(job #2635485)

Utilizator alextodoranTodoran Alexandru Raul alextodoran Data 14 iulie 2020 16:55:59
Problema Algoritmul lui Gauss Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
/**
 ____ ____ ____ ____ ____
||a |||t |||o |||d |||o ||
||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|

**/

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N_MAX = 305;
const int M_MAX = 305;

const double EPS = 1e-8;

int n, m;

double a[N_MAX][M_MAX];

int p[N_MAX];

double ans[M_MAX];

int main()
{
    ifstream fin ("gauss.in");
    ofstream fout ("gauss.out");
    fin >> n >> m;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m + 1; j++)
            fin >> a[i][j];
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
            if(abs(a[i][j]) > EPS)
            {
                p[i] = j;
                break;
            }
        if(p[i] == 0)
        {
            if(abs(a[i][m + 1]) > EPS)
            {
                fout << "Imposibil\n";
                return 0;
            }
            continue;
        }
        for(int k = 1; k <= n; k++)
            if(i != k && abs(a[k][p[i]]) > EPS)
            {
                double r = a[k][p[i]] / a[i][p[i]];
                for(int j = 1; j <= m + 1; j++)
                    a[k][j] -= a[i][j] * r;
            }
    }
    for(int i = 1; i <= n; i++)
        if(p[i] != 0)
            ans[p[i]] = a[i][m + 1] / a[i][p[i]];
    for(int i = 1; i <= m; i++)
        fout << fixed << setprecision(10) << ans[i] << " ";
    fout << "\n";
    return 0;
}