Cod sursa(job #2794876)

Utilizator loraclorac lorac lorac Data 5 noiembrie 2021 16:42:33
Problema Algoritmul lui Gauss Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("gauss.in");
ofstream out("gauss.out");
typedef long double ld;
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(a[i][m+1]!=0)
            {
                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;
}