Pagini recente » Cod sursa (job #3312456) | Cod sursa (job #2329310) | Cod sursa (job #1718153) | Cod sursa (job #1449096) | Cod sursa (job #3305756)
#pragma GCC optimize("O3,fast-math,unroll-loops")
#include<bits/stdc++.h>
#define ld long double
using namespace std;
const int dm=310;
int i,j,n,m,poz[dm],row,col,vl;
ld mat[dm][dm],ans[dm],cf,eps=1e-10;
void swapu(int i,int j,int l)
{
for(int k=l;k<=m+1;++k)swap(mat[i][k],mat[j][k]);
}
int main()
{
ifstream fin("gauss.in");
ofstream fout("gauss.out");
fin>>n>>m;
for(i=1;i<=n;++i)
for(j=1;j<=m+1;++j)
fin>>mat[i][j];
for(i=1;i<=m+1;++i)poz[i]=-1;
for(row=1,col=1;row<=n&&col<=m;++col)
{
vl=row;
for(i=row;i<=n;++i)
if(abs(mat[i][col])>abs(mat[vl][col]))vl=i;
if((abs(mat[vl][col]))<eps)continue;
swapu(vl,row,col);
poz[col]=row;
for(i=1;i<=n;++i)
if(i!=row)
{
cf= mat[i][col]/mat[row][col];
for(j=col;j<=m+1;++j)mat[i][j]-=(ld)mat[row][j]*cf;
}
++row;
}
for(i=1;i<=m;++i)
if(poz[i]!=-1)
ans[i]=(ld)mat[poz[i]][m+1]/mat[poz[i]][i];
for(i=1;i<=n;++i)
{
double sum=0;
for(j=1;j<=m;++j)sum+=(ld)ans[j]*mat[i][j];
if(abs(sum-mat[i][m+1])>eps)
{
fout<<"Imposibil";return 0;
}
}
fout<<fixed<<setprecision(10);
for(i=1;i<=m;++i)fout<<ans[i]<<" ";
return 0;
}