Cod sursa(job #3267930)

Utilizator Alex_BerbescuBerbescu Alexandru Alex_Berbescu Data 12 ianuarie 2025 22:28:58
Problema Algoritmul lui Gauss Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("fast-math")
#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
double eps = 1e-8;
const int dim = 2e5 + 55;
int n, m, poz[305];
double mat[305][305], coef, ans[305];
double nul(double value)
{
    return -eps < value && value < eps;
}
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    fin >> n >> m;
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j <= m + 1; ++j)
        {
            fin >> mat[i][j];
        }
    }
    for(int i = 1; i <= n; ++i)
    {
        poz[i] = -1;
    }
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j <= m + 1; ++j)
        {
            if(!nul(mat[i][j]))
            {
                poz[i] = j;
                break;
            }
        }
        if(poz[i] == -1)
            continue;
        if(poz[i] == m + 1)
        {
            fout << "Imposibil";
            return 0;
        }
        for(int j = 1; j <= n; ++j)
        {
            if(i == j) continue;
            coef = (double)mat[j][poz[i]] / mat[i][poz[i]];
            for(int k = 1; k <= m + 1; ++k)
            {
                mat[j][k] -= (double)coef * mat[i][k];
            }
        }
    }
    for(int i = 1; i <= n; ++i)
    {
        if(poz[i] != -1)
        {
            ans[poz[i]] = (double)mat[i][m + 1] / mat[i][poz[i]];
        }
    }
    for(int i = 1; i <= n; ++i)
    {
        fout << fixed << setprecision(12) << (double)ans[i] << " ";
    }


}