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>
using namespace std;
#define int long long
const int mod=1e9+7;
const int N=1e5;
const int B=317;
int n,i,j,bs,lim;
int d[N+5],x[N+5],dp[N+5],pre[N+5][B+5];
void Sol(){
cin>>n;
for(i=1;i<=n;i++) cin>>d[i]>>x[i];
bs=sqrt(n);
for(i=0;i<=bs;i++) pre[n][i]=1;
dp[n]=1;
cout<<dp[n]<<' ';
for(i=n-1;i>=1;i--)
{
dp[i]=1;
lim=min(i+d[i]*x[i],n);
if(d[i]>=bs)
{
for(j=i+d[i];j<=n;j+=d[i])
{
dp[i]+=dp[j];
}
dp[i]%=mod;
}
else
{
if(!d[i] || !x[i]) dp[i]=1;
else if(i+d[i]*x[i]+d[i]<=n)
{
dp[i]=(dp[i]+pre[i+d[i]][d[i]]-pre[i+d[i]*x[i]+d[i]][d[i]]+mod)%mod;
}
else
{
dp[i]=(dp[i]+pre[i+d[i]][d[i]])%mod;
}
}
cout<<dp[i]<<' ';
for(j=1;j<=bs;j++) pre[i][j]=(dp[i]+pre[i+j][j])%mod;
}
cout<<dp[1];
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
Sol();
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... |