Cod sursa(job #3343550)

Utilizator Victor5539Tanase Victor Victor5539 Data 27 februarie 2026 18:44:44
Problema Algoritmul lui Gauss Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.74 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");

const int MAX=300;
double EPS=1e-12;
int n,m,i,j,where[MAX+5];
double a[MAX+5][MAX+5],sol[MAX+5];

bool gauss()
{
    for (j=1; j<=m; j++)
        where[j]=0;

    for (i=1,j=1; i<=n && j<=m; j++)
    {
        int row_nonzero=i;
        double val=fabs(a[i][j]);

        for (int row=i; row<=n; row++)
            if (fabs(val)<fabs(a[row][j]))
            {
                row_nonzero=row;
                val=fabs(a[row][j]);
            }

        if (val<EPS)
            continue;

        where[j]=i;

        for (int col=j; col<=m+1; col++)
            swap(a[i][col],a[row_nonzero][col]);

        for (int row=1; row<=n; row++)
        {
            if (row!=i)
            {
                double c=a[row][j]/a[i][j];
                for (int col=j; col<=m+1; col++)
                    a[row][col]-=a[i][col]*c;
            }
        }

        i++;
    }

    for (j=1; j<=m; j++)
    {
        if (where[j]!=0)
            sol[j]=a[where[j]][m+1]/a[where[j]][j];
    }

    for (i=1; i<=n; i++)
    {
        double sum=0;

        for (j=1; j<=m; j++)
            sum+=sol[j]*a[i][j];

        sum-=a[i][m+1];

        if (fabs(sum)>EPS)
            return false;
    }

    return true;
}

int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(nullptr); fout.tie(nullptr);

    fin>>n>>m;
    for (i=1; i<=n; i++)
        for (j=1; j<=m+1; j++)
            fin>>a[i][j];

    if (gauss())
    {
        for (i=1; i<=m; i++)
            fout<<fixed<<setprecision(10)<<sol[i]<<" ";
        fout<<'\n';
    }
    else
        fout<<"Imposibil";
    return 0;
}