Pagini recente » Cod sursa (job #3151039) | Cod sursa (job #77909) | Cod sursa (job #1918402) | Cod sursa (job #818960) | Cod sursa (job #1821236)
#include <bits/stdc++.h>
using namespace std;
typedef double f64;
const int SPQR = 305;
const f64 EPS = 1e-7; // ma gandesc serios sa ma las...
valarray<f64> gs[SPQR];
vector<f64> vals;
inline bool eq(const f64 &a, const f64 &b) {
return abs(a - b) < EPS; }
int main(void) {
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
int n, m;
scanf("%d%d", &n, &m);
for (int i = 0; i < n; ++i) {
gs[i].resize(m + 1);
for (int j = 0; j <= m; ++j)
scanf("%lf", &gs[i][j]); }
for (int k, i = 0, j = 0; i < n && j < m; ++j) {
if (eq(gs[i][j], 0.0)) {
for (k = i + 1; k < n; ++k) if (eq(gs[k][j], 0.0)) {
swap(gs[i], gs[k]);
break; }
if (k == n)
continue; }
for (k = 0; k < n; ++k) if (k != i && !eq(gs[k][j], 0.0))
gs[k]-= gs[i] * (gs[k][j] / gs[i][j]);
++i; }
vals.resize(m);
for (int j, i = 0; i < n; ++i) {
for (j = 0; j < m; ++j)
if(!eq(gs[i][j], 0.0)) {
vals[j] = gs[i][m] / gs[i][j];
break; }
if (j == m && !eq(gs[i][j], 0.0)) {
puts("Imposibil");
return 0; } }
for (auto i: vals)
printf("%.10f ", i);
printf("\n");
return 0; }