Cod sursa(job #2828816)

Utilizator pielevladutPiele Vladut Stefan pielevladut Data 8 ianuarie 2022 00:07:49
Problema Algoritmul lui Gauss Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.32 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("2sah.in");
ofstream fout("2sah.out");

const int NMAX = 300;

int N, M, cnt;
long double solutie[NMAX + 5];
long double v[NMAX + 5][NMAX + 5];
long double copie[NMAX + 5][NMAX + 5];

void swap_linii(int a, int b)
{
    for(int i = 1; i <= M + 1; i ++)
    {
        swap(v[a][i], v[b][i]);
    }
}

signed main()
{
    fin >> N >> M;
    for(int i = 1; i <= N; i ++)
    {
        for(int j = 1; j <= M + 1; j ++)
        {
            fin >> v[i][j];
            copie[i][j] = v[i][j];
        }
    }
    for(int i = 1; i <= M; i ++)
    {
        if(v[i][i] == 0)
        {
            for(int j = i + 1; j <= N; j ++)
            {
                if(v[j][i] != 0)
                {
                    swap_linii(i, j);
                    break;
                }
            }
        }
        for(int j = i; j <= N; j ++)
        {
            if(v[j][1] == 0)
            {
                continue;
            }
            for(int q = 1; q <= M + 1; q ++)
            {
                v[j][q] /= v[j][1];
            }
        }
        for(int j = i + 1; j <= N; j ++)
        {
            if(v[j][1] == 0)
            {
                continue;
            }
            for(int q = 1; q <= M + 1; q ++)
            {
                v[j][q] -= v[i][q];
            }
        }
    }
    for(int i = M; i >= 1; i --)
    {
        v[i][M + 1] /= v[i][i];
        v[i][i] = 1;
        for(int j = i - 1; j >= 1; j --)
        {
            v[j][M + 1] -= v[j][i] * v[i][M + 1];
            v[j][i] = 0;
        }
    }
    for(int i = 1; i <= M; i ++)
    {
        solutie[++cnt] = v[i][M + 1];
    }
    fout << "imposibil";
    return 0;
    /*
    bool imposibil = false;
    for(int i = 1; i <= N; i ++)
    {
        long double suma = 0.0;
        for(int j = 1; j <= M; j ++)
        {
            suma += copie[i][j] * solutie[j];
        }
        if(abs(suma - copie[i][M + 1]) >= 0.001)
        {
            imposibil = true;
        }
    }
    if(imposibil)
    {
        fout << "imposibil" << '\n';
    }
    else
    {
        for(int i = 1; i <= M; i ++)
        {
            fout << solutie[i] << ' ';
        }
        fout << '\n';
    }
    return 0;
    */
}