#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int long long
#define pii pair<ll, ll>
#define fi first
#define se second
const ll N = 2e5 + 5, mod = 1e9 + 7, block = 320;
int n;
int d[N], x[N];
int dp[N];
int total[block][block];
vector<int> adj[N];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++)
cin >> d[i] >> x[i];
dp[1] = 1;
for (int i = 1; i <= n; i++)
{
for (int v : adj[i]) {
int dv = d[v];
int rv = v % dv;
total[dv][rv] = (total[dv][rv] - dp[v] + mod) % mod;
}
for (int b = 1; b < block; b++) {
dp[i] = (dp[i] + total[b][i % b]) % mod;
}
if (d[i] == 0) continue;
if (d[i] >= block) {
for (int t = 1; t <= x[i]; t++) {
int j = i + t * d[i];
if (j > n) break;
dp[j] = (dp[j] + dp[i]) % mod;
}
} else {
int idx = min(n + 1, i + (x[i] + 1) * d[i]);
adj[idx].push_back(i);
int r = i % d[i];
total[d[i]][r] = (total[d[i]][r] + dp[i]) % mod;
}
}
int sum = 0;
for (int i = 1; i <= n; i++)
sum = (sum + dp[i]) % mod;
cout << sum;
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... |