Cod sursa(job #2909278)

Utilizator freak93Adrian Budau freak93 Data 12 iunie 2022 00:48:46
Problema Algoritmul lui Gauss Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

double eps = 1e-6;

int cmp(double x, double y) {
  if (x + eps < y)
    return -1;
  if (y + eps < x)
    return 1;
  return 0;
}

int main() {
  ifstream cin("gauss.in");
  ofstream cout("gauss.out");

  int N, M; cin >> N >> M;

  vector< vector<double> > A(N, vector<double>(M + 1));
  for (int i = 0; i < N; ++i)
    for (int j = 0; j <= M; ++j)
      cin >> A[i][j];

  for (int i = 0, j = 0; i < N && j < M; ++j) {
    for (int k = i; k < N; ++k)
      if (cmp(A[k][j], 0)) {
        swap(A[k], A[i]);
        break;
      }
    if (cmp(A[i][j], 0) == 0) continue;
    for (int k = 0; k < N; ++k)
      if (k != i)
        for (int l = M; l >= j; --l)
          A[k][l] -= A[k][j] / A[i][j] * A[i][l];
    ++i;
  }

  vector<double> answer(M, 0);
  for (int i = 0; i < N; ++i)
    for (int j = 0; j < M; ++j)
      if (cmp(A[i][j], 0)) {
        answer[j] = A[i][M] / A[i][j];
        break;
      }
  cout.setf(ios::fixed, ios::floatfield);
  cout.precision(10);
  for (auto &x : answer)
    cout << x << " ";
  cout << "\n";
}