#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int a;
cin >> a;
int blk = 320;
vector<vector<int>> val(blk+5, vector<int>(blk+5));
vector<vector<pair<int, pair<int,int>>>> pos(a+5);
vector<int> dp(a+5);
vector<pair<int,int>> z(a+5);
int MOD = 1000000007;
dp[1] = 1;
for(int i = 1; i <= a; i++){
int x, y;
cin >> x >> y;
z[i] = {x, y};
if(x < blk && x!=0){
int end = min(i + x * y + 1, a + 1LL);
pos[end].push_back({x, {i % x, i}});
}
// cerr << "ok" << "\n";
}
for(int i = 1; i <= a; i++){
for(auto &p : pos[i]){
val[p.first][p.second.first] = (val[p.first][p.second.first] - dp[p.second.second] + MOD) % MOD;
}
for(int x = 1; x <= blk; x++){
dp[i] = (dp[i] + val[x][i % x]) % MOD;
}
int x = z[i].first, y = z[i].second;
if(x > blk){
for(int j = 1; j <= y; j++){
int nxt = i + j * x;
if(nxt > a) break;
dp[nxt] = (dp[nxt] + dp[i]) % MOD;
}
} else {
if (x==0){
continue;
}
val[x][i % x] = (val[x][i % x] + dp[i]) % MOD;
}
// cerr << i << "\n";
}
long long sum = 0;
for(int i = 1; i <= a; i++){
sum = (sum + dp[i]) % MOD;
}
cout << sum << "\n";
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... |