Submission #1213866

#TimeUsernameProblemLanguageResultExecution timeMemory
1213866stefanneaguTrains (BOI24_trains)C++20
100 / 100
1727 ms216940 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")

using namespace std;

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

unordered_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() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    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]) {
            if (val != 0) {
                admod(dp[i], val);
                if (i + d1 <= n) {
                    admod(prop[i + d1][d1], val);
                }
            }
        }
        admod(ans, dp[i]);
        if (d == 0 || dp[i] == 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...