Cod sursa(job #2415744)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 26 aprilie 2019 14:39:36
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>
#define ld double
#define Nmax 305

using namespace std;

ifstream f("gauss.in");
ofstream g("gauss.out");

const ld eps=1e-9;

ld a[Nmax][Nmax];
ld ans[Nmax];

int main(){

    int n,m;
    f>>n>>m;

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

    for(int t,l,k,i=1,j=1;i<=n and j<=m;i++,j++){

        for(k=i;k<=n;k++)
            if(a[k][j]<-eps or a[k][j]>eps)
                break;
        if(k>n) continue;

        if(k!=i)
            for(l=1;l<=m+1;l++)
                swap(a[k][l],a[i][l]);

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

        for(l=i+1;l<=n;l++){

            for(t=j+1;t<=m+1;t++)
                a[l][t]-=(a[l][j]*a[i][t]);
            a[l][j]=0;
        }
    }

    for(int k,j,i=n;i;i--)
        for(j=1;j<=m+1;j++)
            if(a[i][j]<-eps or a[i][j]>eps){

                if(j==m+1){

                    g<<"Imposibil";
                    return 0;
                }
                ans[j]=a[i][m+1];
                for(k=j+1;k<=m;k++)
                    ans[j]-=(ans[k]*a[i][k]);
                break;
            }

    for(int i=1;i<=m;i++)
        g<<fixed<<setprecision(9)<<ans[i]<<' ';

    return 0;
}