CCCPaste

Get Solution [NCTU Floor 19]

#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;
}