Pagini recente » Cod sursa (job #549774) | Cod sursa (job #2159217) | Cod sursa (job #2665490) | Cod sursa (job #2173777) | Cod sursa (job #1144701)
//#include <fstream>
//#include <iomanip>
#include <cstdio>
#include <vector>
using std::vector;
const long double EPS=0.00000000001L;
inline bool egal(long double a, long double b){
if(a<b) return (b-a)<EPS;
else return (a-b)<EPS;
}
int main(){
//std::ifstream fin("gauss.in");
//std::ofstream fout("gauss.out");
std::freopen("gauss.in","r",stdin);
std::freopen("gauss.out","w",stdout);
unsigned n,m;
//fin>>n>>m;
scanf("%d %d\n",&n,&m);
vector< vector<long double> > matr(n,vector<long double>(m+1));
for(unsigned i=0;i<n;++i)
for(unsigned j=0;j<=m;++j)
//fin>>matr[i][j];
scanf("%Lf",&matr[i][j]);
for(unsigned i=0,j=0; i<n && j<m; ++j, ++i){
unsigned x=i;
for(;x<n;++x) if(!egal(0,matr[x][j])) break;
if(x==n) continue; //variabila libera
else if(x!=i) matr[i].swap(matr[x]);
for(unsigned j2=j+1;j2<=m;++j2) matr[i][j2]/=matr[i][j];
matr[i][j]=1;
for(unsigned i2=i+1;i2<n;++i2){
long double z=matr[i2][j];
for(unsigned j2=j;j2<=m;++j2) matr[i2][j2] -= z*matr[i][j2];
}
}
//necunoscute
vector<long double> x(m,0);
bool posibil=true;
for(int i=n-1;i>=0&&posibil;--i)
for(unsigned j=0;j<=m&&posibil;++j)
if(!egal(0,matr[i][j])){
if(j==m) posibil=false;
else{
x[j]=matr[i][m];
for(unsigned j2=j+1;j2<m;++j2) x[j]-=matr[i][j2]*x[j2];
}
break;
}
//fout<<std::fixed<<std::setprecision(10);
if(posibil){
for(unsigned j=0;j<m;++j) /*fout<<x[j]<<' ';*/ printf("%.10Lf ",x[j]);
//fout<<'\n';
printf("\n");
}
else /*fout<<"Imposibil\n";*/ printf("Imposibil\n");
}