Submission #1038193

#TimeUsernameProblemLanguageResultExecution timeMemory
1038193vjudge1Trains (BOI24_trains)C++17
34 / 100
140 ms257908 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
const int N=2e5;
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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...