This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
const int M = 1e9+7;
using namespace std;
int fx(int x){
if(x<0) return x+M;
if(x>=M) return x-M;
return x;
}
void solve(){
int n;cin >> n;
long long d[n],x[n];
for(int i = 0;i < n;i++) cin >> d[i] >> x[i];
int s = sqrt(n);
int su[s+1][n];
int dp[n];
for(int i = n-1;i >= 0;i--){
dp[i]=1;
if(!d[i] || !x[i] || i+d[i] >= n) goto upd;
if(d[i]<=s) dp[i] = fx(1+su[d[i]][i+d[i]]-(i+(x[i]+1)*d[i]<n ? su[d[i]][i+(x[i]+1)*d[i]] : 0));
else {
for(int j = 1;j <= x[i] && i+j*d[i] < n;j++) dp[i] = fx(dp[i]+dp[i+j*d[i]]);
}
upd:
for(int j = 1;j <= s;j++) su[j][i] = fx(dp[i]+(i+j < n ? su[j][i+j] : 0));
}
cout << dp[0] << '\n';
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
solve();
}
# | 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... |