#include #include #include using namespace std; vector solve(vector > M){ int n = M.size(); for(int i = 0; i < n; i++){ double max = abs(M[i][i]); int maxRow = i; for(int k = i + 1; k < n; k++){ if(abs(M[k][i]) > max){ max = abs(M[k][i]); maxRow = k; } } for(int k = i; k < n + 1; k++){ double tmp = M[maxRow][k]; M[maxRow][k] = M[i][k]; M[i][k] = tmp; } for(int k = i + 1; k < n; k++){ double c = -M[k][i] / M[i][i]; for(int j = i; j < n + 1; j++){ if(i == j) M[k][j] = 0; else M[k][j] += c * M[i][j]; } } } vector x(n); for(int i = n - 1; i >= 0; i--){ x[i] = M[i][n] / M[i][i]; for(int k = i - 1; k >= 0; k--){ M[k][n] -= M[k][i] * x[i]; } } return x; } int main(){ int n; cin >> n; vector > M(n, vector(n+1)); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) cin >> M[i][j]; for(int i = 0; i < n; i++) cin >> M[i][n]; vector x(n); x = solve(M); for(int i = 0; i < n; i++) cout << fixed << setprecision(2) << x[i] << " "; cout << endl; }