Pagini recente » Cod sursa (job #2464497) | Cod sursa (job #2464016) | Cod sursa (job #297332) | Cod sursa (job #2850278) | Cod sursa (job #3268143)
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("fast-math")
#include<bits/stdc++.h>
using namespace std;
long double mat[305][305], ans[305], eps = 1e-10, coef;
int n, m, poz[305];
void interschimb(int i, int j, int l)
{
for(int k = l; k <= m + 1; ++k)
swap(mat[i][k], mat[j][k]);
}
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int32_t main(int argc, char * argv[])
{
fin >> n >> m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m + 1; ++j)
fin >> mat[i][j];
for(int i = 1; i <= m + 1; ++i)
poz[i] = -1;
int col = 1, row = 1;
for(row = 1, col = 1; row <= n && col <= m; col++)
{
int vl = row;
for(int i = row; i <= n; ++i)
{
if(abs(mat[i][col]) > abs(mat[vl][col]))
vl = i;
}
if(abs(mat[vl][col]) < eps)
continue;
interschimb(vl, row, col);
poz[col] = row;
for(int i = 1; i <= n; ++i)
{
if(i != row)
{
coef = mat[i][col] / mat[row][col];
for(int j = col; j <= m + 1; ++j)
mat[i][j] -= (long double)mat[row][j] * coef;
}
}
++row;
}
for(int i = 1; i <= m; ++i)
{
if(poz[i] != -1)
ans[i] = (long double)mat[poz[i]][m + 1] / mat[poz[i]][i];
}
for(int i = 1; i <= n; ++i)
{
double sum = 0;
for(int j = 1; j <= m; ++j)
sum += (double)ans[j] * mat[i][j];
if(abs(sum - mat[i][m + 1]) > eps)
{
fout << "Imposibil";
return 0;
}
}
fout << fixed << setprecision(10);
for(int i = 1; i<= m; ++i)
fout << ans[i] << " ";
return 0;
}