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 ll long long
#define vll vector<ll>
#define all(x) begin(x),end(x)
#define pb push_back
const int N=1e5+10,mod=1e9+7;
const int SQ=420;
ll sm[SQ][SQ];
ll ways[N],suf[N],d[N],x[N];
void solve()
{
ll n;
cin>>n;
bool conp=1;
for(int i=1;i<=n;i++)
{
cin>>d[i]>>x[i];
conp&=(x[i]==1e9);
ways[i]=1;
}
suf[n+1]=0;
for(int i=n;i>=1;i--)
{
if(conp)
{
if(d[i]==0)
{
ways[i]=1;
}
else{
if(d[i]<SQ)
{
ways[i]=(1+sm[d[i]][i%d[i]])%mod;
}
else
{
for(int t=1;t<=x[i] and (i+(d[i]*t))<=n;t++)
{
ways[i]=(ways[i]+ways[i+(d[i]*t)])%mod;
}
}
for(int j=1;j<SQ;j++)
sm[j][i%j]=(sm[j][i%j]+ways[i])%mod;
}
}
else{
if(d[i]==1)
{
int j=min(n,i+x[i]);
ways[i] =(((suf[i+1]-suf[j+1])%mod)+mod)%mod;
ways[i] = (ways[i]+1)%mod;
}
else{
if(d[i]>1){
for(int t=1;t<=x[i] and (i+(d[i]*t))<=n;t++)
{
ways[i]=(ways[i]+ways[i+(d[i]*t)])%mod;
}
}
}
suf[i]=(suf[i+1]+ways[i])%mod;
}
}
cout<<ways[1]%mod<<endl;
}
int main()
{
cin.tie(0);cout.tie(0);
ios::sync_with_stdio(0);
int t=1;
// cin>>t;
while(t--)
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... |