Mai intai trebuie sa te autentifici.

Cod sursa(job #2690594)

Utilizator SochuDarabaneanu Liviu Eugen Sochu Data 24 decembrie 2020 19:01:11
Problema Algoritmul lui Gauss Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#include <bits/stdc++.h>
//#pragma GCC optimize ("03")
#define FastIO ios_base::sync_with_stdio(false) , cin.tie(0) , cout.tie(0)
#define FILES freopen("gauss.in" , "r" , stdin) , freopen("gauss.out" , "w" , stdout)
#define ld long double

using namespace std;

const int N = 305;
const ld EPS = 0.0000001;

int n , m;
ld a[N][N] , x[N];

signed main()
{
	#ifndef ONLINE_JUDGE
		FastIO , FILES;
	#endif

    int i , t , u , j;

    cin >> n >> m;

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

    i = 1 , j = 1;

    while(i <= n && j <= m)
    {
        for(t = i ; t <= n ; t++)
            if(fabs(a[t][j]) > EPS)
                break;

        if(t == n + 1)
        {
            j++;
            continue;
        }

        for(u = 1 ; u <= m + 1 ; u++)
            swap(a[t][u] , a[i][u]);

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

        a[i][j] = 1;

        for(u = i + 1 ; u <= n ; u++)
        {
            a[u][j] = 0;

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

        i++ , j++;
    }

    for(i = n ; i >= 1 ; i--)
        for(j = 1 ; j <= m + 1; j++)
            if(fabs(a[i][j]) > EPS)
            {
                if(j > m)
                    return cout << "Imposibil" , 0;

                x[j] = a[i][m + 1];

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

                break;
            }


    cout << fixed << setprecision(8);

    for(i = 1 ; i <= m ; i++)
        cout << x[i] << ' ';

    return 0;
}