#include <bits/stdc++.h>
using namespace std;
using ll = long long; using pii = pair<ll,ll>;
const ll p = 1e9+7;
const ll K = 300;
const ll Nm = 2e5;
ll pfs[K+1][Nm];
ll dp[Nm];
int main() {
ios_base::sync_with_stdio(false); cin.tie(0);
ll N; cin >> N;
vector<pii> vinp;
for (ll i=0;i<N;i++){
ll d,x; cin >> d >> x;
vinp.push_back({d,x});
}
for (ll i=(N-1);i>=0;i--) {
ll ans = 1;
ll d = vinp[i].first; ll x = vinp[i].second;
if (d>=1 && d<=K) {
ll tmax = i+d*(x+1);
if (tmax>=N) {
tmax = N;
}
ans += p+pfs[d][i+d]-pfs[d][tmax];
}
if (d>K) {
for (ll T=(i+d);T<N && (T-i)/d<=x; T+=d) {
ans += dp[T];
}
}
ans = ans%p;
dp[i]=ans;
for (ll k=1;k<=K;k++) {
pfs[k][i]=(ans+pfs[k][i+k])%p;
}
}
cout << dp[0] <<"\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |