Submission #1033609

#TimeUsernameProblemLanguageResultExecution timeMemory
1033609KhoaDuyTrains (BOI24_trains)C++14
100 / 100
249 ms251704 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define endl '\n' const int mod=1e9+7; const int MAXN=1e5; const int block=317; int sum[MAXN+1][block+1]; signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); memset(sum,0,sizeof(sum)); int n; cin >> n; int DP[n+1]; int x[n+1]; int d[n+1]; for(int i=1;i<=n;i++){ cin >> d[i] >> x[i]; } for(int i=n;i>=1;i--){ DP[i]=1; if(d[i]){ if(d[i]>block){ for(int j=i+d[i];j<=min(n,i+x[i]*d[i]);j+=d[i]){ DP[i]+=DP[j]; DP[i]%=mod; } } else{ if(i+d[i]<=n){ int curr=sum[i+d[i]][d[i]]; int minu=0; if((i+(x[i]+1)*d[i])<=n){ minu=sum[i+(x[i]+1)*d[i]][d[i]]; } curr=(curr-minu+mod)%mod; DP[i]+=curr; DP[i]%=mod; } } } for(int j=1;j<=block;j++){ sum[i][j]=DP[i]; if(i+j<=n){ sum[i][j]+=sum[i+j][j]; sum[i][j]%=mod; } } } cout << DP[1]; }
#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...