Cod sursa(job #2795330)

Utilizator betybety bety bety Data 6 noiembrie 2021 11:21:50
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
typedef long double ld;
const ld eps=0.001;
ld a[305][305];
ld x[305];
int n,m;
int main()
{
    in>>n>>m;
    for(int i=1;i<=n;++i)
    for(int j=1;j<=m+1;++j)
        in>>a[i][j];
    int i=1,j=1;
    while(i<=n and j<=m)
    {
        int x=i;
        while(x<=n and a[x][j]==0)
            ++x;
        if(x==n+1)
        {
            ++j;
            continue;
        }
        for(int k=1;k<=m+1;++k)
            swap(a[i][k],a[x][k]);
        ld aux=a[i][j];
        for(int k=1;k<=m+1;++k)
            a[i][k]/=aux;
        for(int u=i+1;u<=n;++u)
        {
            aux=a[u][j];
            for(int k=1;k<=m+1;++k)
                a[u][k]-=aux*a[i][k];
        }
        ++i,++j;
    }
    for(int i=n;i>=1;--i)
    {
        int pi=1;
        while(pi<=m and a[i][pi]==0)
            ++pi;
        if(pi==m+1)
        {
            if(abs(a[i][m+1])>eps)
            {
                out<<"Imposibil"<<'\n';
                return 0;
            }
            continue;
        }
        x[pi]=a[i][m+1];
        for(int j=m;j>=pi+1;--j)
            x[pi]-=a[i][j]*x[j];
    }
    out<<fixed<<setprecision(10);
    for(int i=1;i<=m;++i)
        out<<x[i]<<' ';
    return 0;
}