#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 1e9+7, N = 1e5, S = 317;
int dp[N];
signed main() {
int n;
cin >> n;
vector<int> d(n), x(n);
for (int i = 0; i < n; ++i) cin >> d[i] >> x[i];
vector<int> final(n);
for (int i = 0; i < n; ++i) final[i] = i+d[i]*(x[i]+1);
dp[n-1] = 1;
vector<vector<int>> suff(S, vector<int>(n+S, 0));
for (int i = n-1; i >= 0; --i) {
dp[i] = 1;
if (d[i] >= S) {
for (int j = i+d[i]; j <= min(n, i+d[i]*x[i]); j+=d[i]) {
dp[i] += dp[j];
dp[i] %= mod;
}
} else if (d[i] > 0) {
dp[i] += suff[d[i]][i+d[i]];
if (final[i] < n) dp[i] = (dp[i]-suff[d[i]][final[i]])%mod;
dp[i] = (dp[i]+mod)%mod;
}
for (int j = 1; j < S; ++j) suff[j][i] = (suff[j][i+j]+dp[i])%mod;
}
cout << dp[0] << endl;
return 0;
}
# | 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... |