Cod sursa(job #3305756)

Utilizator davidgrusGeorge David Rusanescu davidgrus Data 4 august 2025 18:14:16
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#pragma GCC optimize("O3,fast-math,unroll-loops")
#include<bits/stdc++.h>
#define ld long double
using namespace std;
const int dm=310;
int i,j,n,m,poz[dm],row,col,vl;
ld mat[dm][dm],ans[dm],cf,eps=1e-10;
void swapu(int i,int j,int l)
{
    for(int k=l;k<=m+1;++k)swap(mat[i][k],mat[j][k]);
}
int main()
{
    ifstream fin("gauss.in");
    ofstream fout("gauss.out");
    fin>>n>>m;
    for(i=1;i<=n;++i)
        for(j=1;j<=m+1;++j)
        fin>>mat[i][j];

    for(i=1;i<=m+1;++i)poz[i]=-1;


    for(row=1,col=1;row<=n&&col<=m;++col)
    {
        vl=row;
        for(i=row;i<=n;++i)
            if(abs(mat[i][col])>abs(mat[vl][col]))vl=i;

        if((abs(mat[vl][col]))<eps)continue;

        swapu(vl,row,col);

        poz[col]=row;

        for(i=1;i<=n;++i)
            if(i!=row)
        {
            cf= mat[i][col]/mat[row][col];

            for(j=col;j<=m+1;++j)mat[i][j]-=(ld)mat[row][j]*cf;
        }


        ++row;

    }
    for(i=1;i<=m;++i)
        if(poz[i]!=-1)
            ans[i]=(ld)mat[poz[i]][m+1]/mat[poz[i]][i];


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

        for(j=1;j<=m;++j)sum+=(ld)ans[j]*mat[i][j];

        if(abs(sum-mat[i][m+1])>eps)
        {
            fout<<"Imposibil";return 0;

        }
    }
    fout<<fixed<<setprecision(10);

    for(i=1;i<=m;++i)fout<<ans[i]<<" ";
    return 0;
}