Pagini recente » Cod sursa (job #2027074) | Cod sursa (job #2555809) | Cod sursa (job #964728) | Cod sursa (job #1592719) | Cod sursa (job #1835381)
# include <stdio.h>
# include <bits/stdc++.h>
using namespace std;
# define fi cin
# define fo cout
# define x first
# define y second
# define ll long long
# define IOS ios_base :: sync_with_stdio(0);cin.tie(0)
# define p(v) cerr << #v << " = " << v << '\n'
# define p2(v) cerr << #v << " = " << (complex < int > (v.x,v.y)) << '\n'
# define vi vector < int >
# define vl vector < ll >
# define pii pair < int , int >
# define mp make_pair
# define db long double
# define pb push_back
# define pdd pair < db , db >
# define CF
int main(void)
{
#ifdef CF
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
#endif // CF
srand(time(0));
fo << fixed << setprecision(10);
cerr << fixed << setprecision(10);
static double s[333][333];
int n,m;
fi>>n>>m;
for (int i = 1;i <= n;++i)
for (int j = 1;j <= m + 1;++j)
fi>>s[i][j];
static int W[333];
const double eps = 1e-6;
for (int i = 1,j = 1;i <= n && j <= m;++j)
{
int cur = i;
for (int k = i;k <= n;++k)
if (abs(s[k][j]) > abs(s[cur][j]))
cur = k;
if (abs(s[cur][j]) < eps)
continue;
W[j] = i;
if (cur != i)
for (int k = 1;k <= m + 1;++k)
swap(s[i][k],s[cur][k]);
for (int ii = 1;ii <= n;++ii)
if (ii != i)
{
const auto C = s[ii][j] / s[i][j];
for (int jj = 1;jj <= m + 1;++jj)
s[ii][jj] -= s[i][jj] * C;
}
++i;
}
static double ans[333];
for (int i = 1;i <= min(n,m);++i)
ans[i] = s[W[i]][m + 1] / s[W[i]][i];
for (int i = 1;i <= n;++i)
{
double sum = 0;
for (int j = 1;j <= m;++j)
sum += s[i][j] * ans[j];
if (abs(sum - s[i][m + 1]) > eps)
return puts("Imposibil") * 0;
}
for (int i = 1;i <= m;++i)
fo << ans[i] << " \n"[i == m];
cerr << "Time elapsed :" << clock() * 1000.0 / CLOCKS_PER_SEC << " ms" << '\n';
return 0;
}