Submission #1109200

#TimeUsernameProblemLanguageResultExecution timeMemory
1109200Captain_GeorgiaTrains (BOI24_trains)C++17
8 / 100
2053 ms1748 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int mod = 1e9 + 7;

int32_t main () {

    ios_base::sync_with_stdio(0); 
    cin.tie(0); 
    cout.tie(0); 

    int N;
    cin >> N;
    vector<array<int, 2>> arr(N + 1);
    vector<ll> dp(N + 1, 1);
    priority_queue<array<int, 2>> pq;
    for (int i = 1;i <= N;i ++) {
        cin >> arr[i][0] >> arr[i][1];
        if (i + 1LL * arr[i][0] * arr[i][1] <= N) {
            pq.push({i + arr[i][0] * arr[i][1], i});
        } else {
            pq.push({((N - i) / arr[i][0]) * arr[i][0] + i, i});
        }
    }
    for (int i = N;i >= 1;i --) {
        while (pq.size() > 0) {
            auto it = pq.top();
            // cout << i << " " << it[0] << " " << it[1] << "\n";
            // _time ++;
            if (it[0] < i) break;
            pq.pop();
            if (it[1] == i) continue;
            dp[it[1]] = (dp[it[1]] + dp[i]) % mod;
            if (it[0] - arr[it[1]][0] <= it[1]) continue;
            pq.push({it[0] - arr[it[1]][0], it[1]});
        }
    }
    cout << dp[1] << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...