Pagini recente » Cod sursa (job #1779408) | Cod sursa (job #2370608) | Cod sursa (job #299820) | Cod sursa (job #1516662) | Cod sursa (job #3207149)
#include <bits/stdc++.h>
#pragma GCC optmize ("03")
using namespace std;
#define INFILE "gauss.in"
#define OUTFILE "gauss.out"
const int N_MAX = 3e2 + 5;
const double EPS = 1e-8;
int n, m;
int row[N_MAX];
double v[N_MAX][N_MAX];
bool equalToZero(double number){
return (-EPS < number && number < EPS);
}
void solve(){
cin >> n >> m;
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= m + 1; ++j){
cin >> v[i][j];
}
}
int line = 1, column = 1;
while(line <= n && column <= m){
if(equalToZero(v[line][column])){
int ind = line + 1;
while(ind <= n && equalToZero(v[ind][column])) ++ind;
if(ind > n){
++column;
continue;
}
swap(v[line], v[ind]);
}
for(int i = 1; i <= n; ++i){
if(i == line) continue;
double aux = v[i][column] / v[line][column];
for(int j = 1; j <= m + 1; ++j){
v[i][j] -= aux * v[line][j];
}
}
row[column++] = line++;
}
if(column > m){
for(; line <= n; ++line){
if(!equalToZero(v[line][m + 1])){
cout << "Imposibil" << '\n';
return;
}
}
}
cout << setprecision(10) << fixed;
for(int i = 1; i <= m; ++i){
cout << (row[i] ? (v[row[i]][m + 1] / v[row[i]][i]) : 0.0) << " ";
}
}
int main(){
ios_base::sync_with_stdio(false);
freopen(INFILE, "r", stdin);
freopen(OUTFILE, "w", stdout);
cin.tie(0), cout.tie(0);
solve();
return 0;
}