Pagini recente » Cod sursa (job #1572306) | Monitorul de evaluare | Rating Tudor Calu (tudorcalu) | Cod sursa (job #1634546) | Cod sursa (job #1741153)
#include <bits/stdc++.h>
using namespace std;
ifstream in ( "gauss.in" );
ofstream out( "gauss.out" );
const int DIM = 3e2 + 5;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-5;
int N, M;
double A[DIM][DIM], X[DIM];
int main( int argc, const char *argv[] ) {
in >> N >> M;
for( int i = 1; i <= N + 0; i ++ )
for( int j = 1; j <= M + 1; j ++ )
in >> A[i][j];
for( int i = 1, j = 1, ok = 0; i <= N && j <= M; ok = 0 ) {
for( int k = i; k <= N; k ++ ) {
if( fabs( A[k][j] ) > EPS ) {
for( int p = 1; p <= M + 1; p ++ )
swap( A[i][p], A[k][p] );
ok = 1;
break;
}
}
if( ok == 0 ) {
j ++;
continue;
}
for( int k = M + 1; k >= j; k -- )
A[i][k] /= A[i][j];
for( int k = i + 1; k <= N; k ++ ) {
for( int p = M + 1; p >= j; p -- )
A[k][p] -= A[k][j] * A[i][p];
}
i ++, j ++;
}
for( int i = N; i >= 1; i -- ) {
for( int j = 1; j <= M + 1; j ++ ) {
if( fabs( A[i][j] ) > EPS ) {
if( j == M + 1 ) {
out << "Imposibil\n";
return 0;
}
X[j] = A[i][M + 1];
for( int k = M; k > j; k -- )
X[j] -= X[k] * A[i][k];
break;
}
}}
for( int i = 1; i <= M; i ++ )
out << setprecision( 10 ) << fixed << X[i] << " ";
out << '\n';
return 0;
}