Cod sursa(job #3232057)

Utilizator puica2018Puica Andrei puica2018 Data 28 mai 2024 19:08:23
Problema Algoritmul lui Gauss Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m;

double a[305][305];

double x[305];

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

    int i=1,j=1;
    while(i<=n && j<=m)
    {
        int k=i;
        while(k<=n && a[k][j]==0)
            k++;

        if(k==n+1)
        {
            j++;
        }
        else
        {
            if(i!=k)
            {
                for(int j=1; j<=m+1; j++)
                    swap(a[i][j],a[k][j]);
            }

            for(int l=j+1; l<=m+1; l++)
                a[i][l]/=a[i][j];
            a[i][j]=1;

            for(int l=i+1; l<=n; l++)
            {
                for(int c=j+1; c<=m+1; c++)
                    a[l][c]-=a[i][c]*a[l][j];

                a[l][j]=0;
            }

            i++;
            j++;
        }
    }

    for(int i=n; i>=1; i--)
    {
        int j=1;
        while(j<=m+1 && a[i][j]==0)
            j++;

        if(j==m+2)
        {
            x[i]=0;
        }
        else
        {
            if(j==m+1)
            {
                fout<<"Imposibil\n";
                return 0;
            }

            x[i]=a[i][m+1];
            for(int jj=j+1; jj<=m; jj++)
                x[i]-=x[jj]*a[i][jj];
        }
    }

    fout<<fixed<<setprecision(10);
    for(int i=1; i<=m; i++)
        fout<<x[i]<<" ";
    fout<<"\n";

    return 0;
}