Cod sursa(job #1955110)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 5 aprilie 2017 20:03:21
Problema Algoritmul lui Gauss Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <cstdio>
#include <algorithm>

#define eps 1e-8

using namespace std;

double v[310][310], ans[310];
int poz[310];

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

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

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

    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= m + 1; ++j)
            if (max (v[i][j], -v[i][j]) >= eps)
            {
                poz[i] = j;
                break;
            }

        if (!poz[i]) continue;
        if (poz[i] == m + 1)
        {
            printf ("Imposibil\n");
            return 0;
        }

        for (int h = 1; h <= n; ++h)
            if (h != i && max (v[h][poz[i]], -v[h][poz[i]]) >= eps)
            {
                double cit = v[i][poz[i]] / v[h][poz[i]];

                for (int j = 1; j <= m + 1; ++j)
                    v[h][j] = v[h][j] * cit - v[i][j];
            }
    }

    for (int i = 1; i <= n; ++i)
        if (poz[i])
            ans[poz[i]] = v[i][m + 1] / v[i][poz[i]];

    for (int i = 1; i <= m; ++i)
        printf ("%.12f ", ans[i]);

    printf ("\n");

    return 0;
}