Submission

Status:

[PP-SSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: goine

Problemset: forex

Language: cpp

Time: 0.002 second

Submitted On: 2025-10-10 21:38:24

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;

    vector<vector<double>> rate(n, vector<double>(n));
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            cin >> rate[i][j];
    
    vector<vector<double>> dp(n, vector<double>(n+1, 0.0));
    vector<vector<int>> pre(n, vector<int>(n+1, -1));
    dp[0][0] = 1.0;
    
    int steps = -1;
    int endCurrency = -1;
    
    for (int k = 1; k <= n; k++) {
        for (int u = 0; u < n; u++) {
            if (dp[u][k-1] == 0) continue;
            for (int v = 0; v < n; v++) {
                double val = dp[u][k-1] * rate[u][v];
                if (val > dp[v][k]) {
                    dp[v][k] = val;
                    pre[v][k] = u;
                }
            }
        }

        if (dp[0][k] > 1.01) {
            steps = k;
            endCurrency = 0;
            break;
        }
    }
    
    if (steps == -1) {
        cout << -1 << endl;
        return 0;
    }
    
    vector<int> path(steps+1);
    int cur = endCurrency;
    for (int k = steps; k >= 1; k--) {
        path[k] = cur + 1;
        cur = pre[cur][k];
    }
    path[0] = 1;
    
    for (int i = 0; i < steps; i++) {
        cout << path[i];
        if (i < steps) cout << " ";
    }

    cout << endl; // what the fuck
    return 0;
}