Cod sursa(job #2885010)

Utilizator PetyAlexandru Peticaru Pety Data 5 aprilie 2022 13:35:43
Problema Algoritmul lui Gauss Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>
#define ll long long

using namespace std;

ifstream fin ("gauss.in");
ofstream fout ("gauss.out");

const int INF = 1e9;
const int MOD = 1e9 + 7;
const double eps = 1e-5;

int n, m;
double x[302];
double a[302][302]; 

int main () 
{
  ios_base::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
 
  fin >> n >> m;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m + 1; j++)
      fin >> a[i][j];
  int eq = 1, var = 1;
  while (eq <= n && var <= m) {
    int k;
    for (k = eq; k <= n; k++)
      if (abs(a[k][var]) > eps)
        break;
    if (k == n + 1) {
      var++;
      continue;
    }
    if (eq != k)
    for (int j = 1; j <= m + 1; j++)
      swap(a[eq][j], a[k][j]);
    double aux = a[eq][var];
    for (int j = var; j <= m + 1; j++)
      a[eq][j] /= aux;
    for (int k = eq + 1; k <= n; k++) {
      for (int j = var + 1; j <= m + 1; j++)
        a[k][j] -= a[k][var] * a[eq][j];
      a[k][var] = 0;
    }
    eq++;
    var++;
  }
  for (int i = n; i; i--)
    for (int j = 1; j <= m + 1; j++) {
      if (abs(a[i][j]) > eps) {
        if (j == m + 1) {
          fout << "Imposibil";
          return 0;
        }
        x[j] = a[i][m + 1];
        for (int k = j + 1; k <= m; k++)
          x[j] -= x[k + 1] * a[i][k];
        break;
      }
    }
  for (int i = 1; i <= m; i++)
    fout << fixed << setprecision(6) << x[i] << " ";
  
  
  return 0;
}