Cod sursa(job #3157489)

Utilizator matwudemagogul matwu Data 15 octombrie 2023 16:57:32
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.66 kb
#include <bits/stdc++.h>
using namespace std;
const int N = 303;
#define EPS 0.0000001
ifstream fin("gauss.in");
ofstream fout("gauss.out");
#define cin fin
#define cout fout
int n, m;
vector<vector<long double>> matr(N, vector<long double>(N));
vector<long double> p(N);
int main(){
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m + 1; j++){
            cin >> matr[i][j];
        }
    }
    int i = 1, j = 1;
    
    while(i <= n && j <= m){
        int k; 
        for(k = i; k <= n; k++){
            if(matr[k][j] < -EPS || matr[k][j] > EPS){
                break;
            }
        }
        if(k == n + 1){
            j++;
            continue;
        }
        swap(matr[i], matr[k]);
        for(int l = j + 1; l <= m + 1; l++){
            matr[i][l] /= matr[i][j];
        }
        matr[i][j] = 1;
        for(int u = i + 1; u <= n; u++){
            for(int l = j + 1; l <= m + 1; l++){
                matr[u][l] -= matr[i][l] * matr[u][j];
            }
            matr[u][j] = 0;
        }
        i++, j++;
    }

    for(int i = n; i >=1 ; i--){
        for(int j = 1; j <= m + 1; j++){
            if(matr[i][j] > EPS || matr[i][j] < -EPS){
                if(j == m + 1){
                    cout << "Imposibil";
                    return 0;
                }

                p[j] = matr[i][m + 1];
                for(int k = j + 1; k <= m; k++){
                    p[j] -= matr[i][k] * p[k];
                }
                break;
            }
        }
    }

    for(int i = 1; i <= m; i++){
        cout << fixed << setprecision(8) << p[i] << " ";
    }
}