Cod sursa(job #3364909)

Utilizator matei0000Neacsu Matei matei0000 Data 13 septembrie 2026 15:45:30
Problema Algoritmul lui Gauss Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;

using ld = long double;
const ld eps = 1e-9;

ld a[305][305], rasp[305];
bool fin[305];

signed main() {
	ifstream cin("gauss.in");
	ofstream cout("gauss.out");
	
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < n; i ++) {
		for (int j = 0; j <= m; j ++) {
			cin >> a[i][j];
		}
	}
	
	for (int i = 0; i < n; i ++) {
		int eu = m;
		for (int j = 0; j < m; j ++) {
			if (abs(a[i][j]) > eps) {
				eu = j;
				break;
			}
		}
		if (eu == m) {
			if (abs(a[i][m]) > eps) {
				cout << "Imposibil\n";
				return 0;
			}
			continue;
		}
		for (int j = i + 1; j < n; j ++) {
			for (int k = m; k >= 0; k --) {
				a[j][k] -= a[j][eu] / a[i][eu] * a[i][k];
			}
		}
	}
	
	for (int i = 0; i < n; i ++, cout << '\n') {
		for (int j = 0; j <= m; j ++) cout << a[i][j] << " ";
	}
	
	for (int i = n - 1; i >= 0; i --) {
		vector<int> nenule;
		for (int j = 0; j < m; j ++) {
			if (fin[j]) {
				a[i][m] -= rasp[j] * a[i][j];
				a[i][j] = 0;
			} else if (abs(a[i][j]) > eps) {
				nenule.push_back(j);
			}
		}
		if (nenule.empty()) continue;
		rasp[nenule[0]] = a[i][m] / a[i][nenule[0]];
		for (auto i : nenule) fin[i] = true;
	}
	cout << fixed << setprecision(8);
	for (int i = 0; i < m; i ++) cout << rasp[i] << " ";
	cout << '\n';
}