Pagini recente » Istoria paginii runda/312/clasament | Cod sursa (job #2401526) | Istoria paginii runda/oji_2004_10 | Cod sursa (job #964161) | Cod sursa (job #1205549)
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#define Nmax 305
#define EPS 0.00000001
using namespace std;
double A[Nmax][Nmax];
double X[Nmax];
int N,M;
void read()
{
scanf("%d%d",&N,&M);
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= M + 1; ++j)
scanf("%lf",&A[i][j]);
}
void swap_line(int i,int k)
{
for(int j = 1; j <= M + 1; ++j)
swap(A[i][j],A[k][j]);
}
void afish()
{
for(int i = 1; i <= N; ++i)
{
for(int j = 1; j <= M +1; ++j)
printf("%.3lf ",A[i][j]);
printf("\n");
}
printf("\n----------------------------------\n");
}
void gauss()
{
int i,j,k,l;
double value;
for(i = 1, j = 1; i <= N && j <= M; ++i,++j)
{
for(k = i; k <= N; ++k)
if(fabs(A[k][j]) >= EPS)
break;
if(k == N + 1)
continue;
if(i != k) swap_line(i,k);
for(k = i + 1; k <= N; ++k)
{
value = A[k][j]/A[i][j];
for(l = j; l <= M + 1; ++l)
{
A[k][l] = A[k][l] - value * A[i][l];
if( A[k][l] < EPS && A[k][l] > - EPS)
A[k][l] = 0;
}
}
///afish();
}
}
void get_answers()
{
int i,j,k,l;
for(i = N; i >= 1; --i)
{
for(j = 1; j <= M && !A[i][j]; ++j);
if(j == M + 1 && N == M){
printf("Imposibil\n");
exit(0);
}
X[i] = A[i][M+1];
for(k = j + 1; k <= M; ++k)
X[i] -= X[k]*A[i][k];
X[i] /= A[i][j];
}
}
void print_answers()
{
for(int i = 1; i <= M; ++i){
printf("%.8lf ",X[i]);
}
}
int main()
{
freopen("gauss.in","r",stdin);
///freopen("gauss.out","w",stdout);
read();
gauss();
get_answers();
print_answers();
return 0;
}