Submission #1038198

#TimeUsernameProblemLanguageResultExecution timeMemory
1038198vjudge1Trains (BOI24_trains)C++17
100 / 100
145 ms256624 KiB
#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<=lim;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...