Pagini recente » Cod sursa (job #3219477) | Cod sursa (job #1208882) | Istoria paginii problema/citylog | Cod sursa (job #1671246) | Cod sursa (job #3136743)
#include <bits/stdc++.h>
#define L 305
#define EPS 0.0000000001
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
double m[L][L];
bool vis[L];
int main(){
int l, c;
fin >> l >> c;
for (int i = 0; i < l; i++)
for (int j = 0; j <= c; j++)
fin >> m[i][j];
for (int j = 0; j < c; j++){
int rel = -1;
for (int i = 0; i < l; i++)
if (abs(m[i][j]) > EPS && !vis[i]){
rel = i;
i = l;
}
if (rel == -1)
continue;
vis[rel] = true;
double x = m[rel][j];
for (int k = 0; k <= c; k++)
m[rel][k] /= x;
for (int i = 0; i < l; i++)
if (i != rel){
double coef = m[i][j];
for (int k = 0; k <= c; k++){
m[i][k] -= coef * m[rel][k];
if (abs(m[i][k]) < EPS)
m[i][k] = 0;
}
}
}
for (int i = 0; i < l; i++){
bool ok = false;
for (int j = 0; j < c; j++){
if (abs(m[i][j]) > EPS)
ok = true;
}
if (!ok && abs(m[i][c]) > EPS){
fout << "Imposibil\n";
return 0;
}
}
fout << setprecision(10) << fixed;
for (int j = 0; j < c; j++)
for (int i = 0; i < l; i++)
if (abs(m[i][j]) > EPS){
fout << m[i][c] << " ";
i = l;
}
return 0;
}