Submission #1213846

#TimeUsernameProblemLanguageResultExecution timeMemory
1213846stefanneaguTrains (BOI24_trains)C++20
71 / 100
2092 ms9168 KiB
#include <bits/stdc++.h>

using namespace std;

const int nmax = 1e5 + 1, mod = 1e9 + 7;

map<int, int> prop[nmax];
int dp[nmax];

void scmod(int &a, int b) {
    a -= b;
    if (a < 0) {
        a += mod;
    }
}

void admod(int &a, int b) {
    a += b;
    if (a >= mod) {
        a -= mod;
    }
}

int32_t main() {
    int n;
    cin >> n;
    dp[1] = 1;
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        int x, d;
        cin >> d >> x;
        for (auto [d1, val] : prop[i]) {
            admod(dp[i], val);
            if (i + d1 <= n) {
                admod(prop[i + d1][d1], val);
            }
        }
        admod(ans, dp[i]);
        if (d == 0) {
            continue;
        }
        if (i + 1ll * (x + 1) * d <= n) {
            scmod(prop[i + (x + 1) * d][d], dp[i]);
        }
        if (i + d <= n) {
            admod(prop[i + d][d], dp[i]);
        }
        prop[i].clear();
    }
    cout << ans;
    return 0;
}
#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...