Pagini recente » Borderou de evaluare (job #2932004) | Borderou de evaluare (job #1504955) | Borderou de evaluare (job #2933787) | Borderou de evaluare (job #1569492) | Cod sursa (job #1970523)
#include <bits/stdc++.h>
using namespace std;
#define FILE_IO
class Gauss
{
public:
const double eps = 1e-7;
int N, M;
vector < vector<double> > g;
vector <double> ans;
int ok;
Gauss() {N = M = 0;}
Gauss(int _N, int _M)
{
N = _N, M = _M;
g.resize(N + 5);
for(int i = 0; i < g.size(); i++) g[i].resize(M + 5);
ans.resize(M + 5);
}
void solve()
{
ok = 1;
vector <int> p(N + 5);
for(int i = 0; i < N; i++)
{
for(p[i] = 0; p[i] <= M && fabs(g[i][ p[i] ]) <= eps; p[i]++);
if(p[i] == M) {ok = 0; return;}
if(p[i] == M + 1) continue;
for(int j = 0; j < N; j++)
if( fabs(g[j][ p[i] ]) > eps && i != j )
{
double rap = -(g[j][ p[i] ] / g[i][ p[i] ]);
for(int k = 0; k <= M; k++)
g[j][k] += g[i][k] * rap;
}
}
for(int i = 0; i < M; i++) ans[i] = 0.0;
for(int i = 0; i < N; i++)
if(p[i] < M)
ans[ p[i] ] = g[i][M] / g[i][ p[i] ];
}
};
int main()
{
#ifdef FILE_IO
freopen("gauss.in", "r", stdin);
freopen("gauss.out", "w", stdout);
#endif
int N, M;
cin >> N >> M;
Gauss gss(N, M);
for(int i = 1; i <= N; i++)
for(int j = 1; j <= M + 1; j++)
{
double x;
cin >> x;
gss.g[i - 1][j - 1] = x;
}
gss.solve();
if(!gss.ok) {printf("Imposibil"); return 0;}
for(int i = 0; i < M; i++)
cout << fixed << setprecision(8) << gss.ans[i] << " ";
return 0;
}