Cod sursa(job #2477319)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 19 octombrie 2019 22:59:47
Problema Algoritmul lui Gauss Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.81 kb
#include <iostream>
#include <cstdio>
#include <cmath>
#include <iomanip>

using namespace std;

const int N = 300 + 7;
const double EPS = 1e-14;

int n, m, pos[N];
double mat[N][N], ans[N];

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

        cin >> n >> m;
        for (int i = 1; i <= n; i++)
                for (int j = 1; j <= m + 1; j++)
                        cin >> mat[i][j];

        for (int i = 1; i <= n; i++)
        {
                int j = 1;
                while (j <= m + 1 && fabs(mat[i][j]) < EPS)
                        j++;
                if (j == m + 2)
                        continue;
                if (j == m + 1)
                {
                        cout << "Imposibil\n";
                        return 0;
                }
                pos[i] = j;
                for (int k = i; k <= n; k++)
                        if (mat[k][j])
                        {
                                for (int p = j + 1; p <= m + 1; p++)
                                        mat[k][p] /= mat[k][j];
                                mat[k][j] = 1;
                                if (k != i)
                                        for (int p = j; p <= m + 1; p++)
                                                mat[k][p] -= mat[i][p];
                        }
        }

        for (int i = n; i >= 1; i--)
                if (pos[i])
                {
                        ans[pos[i]] = mat[i][m + 1];
                        for (int j = m; j > pos[i]; j--)
                                ans[pos[i]] -= mat[i][j] * ans[j];
                }

        for (int i = 1; i <= m; i++)
                cout << fixed << setprecision(10) << ans[i] << " ";
        cout << "\n";

        return 0;
}