#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pll pair<ll, ll>
const ll DIM = 1e5 + 7;
const ll mod = 1e9 + 7;
const ll sq = 350;
ll dp[DIM];
ll s[sq+7][sq+7];
ll er[DIM][sq+7];
int main(){
ios::sync_with_stdio(false);cin.tie(nullptr); cout.tie(nullptr);
ll n;
cin >> n;
dp[1] = 1;
for (int i=1; i<=n; i++) {
ll d, x;
cin >> d >> x;
for (int j=1; j<=sq; j++) {
dp[i] += s[j][i%j];
dp[i] %= mod;
s[j][i%j] -= er[i][j];
if (s[j][i%j] < 0) s[j][i%j] += mod;
er[i][j] = 0;
}
if (d == 0) continue;
if (x <= sq) {
for (int j=i+d; j<=min(n, i + x*d); j+=d) {
dp[j] += dp[i];
dp[j] %= mod;
}
continue;
}
if (d >= sq) {
for (int j=i+d; j<=min(n, i + x*d); j+=d) {
dp[j] += dp[i];
dp[j] %= mod;
}
}
else {
s[d][i%d] += dp[i];
s[d][i%d] %= mod;
if (i + d*x <= n) {
er[i + x*d][d] += dp[i];
er[i + x*d][d] %= mod;
}
}
}
ll answer = 0;
for (int i=1; i<=n; i++) {
answer += dp[i];
answer %= mod;
}
cout << answer << endl;
}
;
# | 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... |