Cod sursa(job #1826946)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 11 decembrie 2016 10:39:01
Problema Algoritmul lui Gauss Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

const double eps = 1e-8;
const int Nmax = 303;

int n, m, i, j, k, p[Nmax];
double coef, a[Nmax][Nmax], ans[Nmax];

double modul(double x)
{
    return max(x, -x);
}

int main()
{
    freopen("gauss.in", "r", stdin);
    freopen("gauss.out", "w", stdout);

    scanf("%d%d", &m, &n);

    for(i=1; i<=m; ++i)
    for(j=1; j<=n+1; ++j)
        scanf("%lf", &a[i][j]);

    for(i=1; i<=m; ++i)
    {
        for(j=1; j<=n+1; ++j)
            if(modul(a[i][j]) > eps) break;

        if(j==n+2) continue;

        if(j==n+1)
        {
            printf("Imposibil\n");
            return 0;
        }

        p[i] = j;

        for(j=1; j<=m; ++j)
        if(i!=j && modul(a[j][p[i]]) > eps)
        {
            coef = a[j][p[i]] / a[i][p[i]];
            for(k=1; k<=n+1; ++k)
                a[j][k] -= coef * a[i][k];
        }
    }

    for(i=1; i<=m; ++i)
        if(p[i]) ans[p[i]] = a[i][n+1] / a[i][p[i]];

    for(i=1; i<=n; ++i) printf("%.10lf ", ans[i]);

    return 0;
}