Submission #1268126

#TimeUsernameProblemLanguageResultExecution timeMemory
1268126nguyenkhangxTrains (BOI24_trains)C++20
100 / 100
238 ms125284 KiB
#include <bits/stdc++.h> #define task "a" #define ll long long #define mems(x, y) memset(x, y, sizeof(x)); using namespace std; const int mod = 1e9 + 7, N = 1e5 + 9; struct pt { }; int n, block; int dp[N], d[N], x[N], s[329][N]; int add(int t,int x) { t+=x; if(t>=mod) t-=mod; if(t<0) t+=mod; return t; } void Input() { cin>>n; block=max(1,(int)sqrt(n)); for(int i=1;i<=n;i++){ cin>>d[i]>>x[i]; } for(int i=n;i>=1;i--){ if(d[i]==0){ dp[i]=1; } else{ int dd=d[i]; int m=min(x[i],(n-i)/dd); ll sum=0; if(dd<=block) { int id1=i+dd; int id2=i+(m+1)*dd; if(id1<=n) { sum=s[dd][id1]; if(id2<=n) sum=add(sum,-s[dd][id2]); } } else{ for(int k=1;k<=m;k++){ sum=add(sum,dp[i + k * dd]); } } dp[i] = add(dp[i],sum+1); } for(int dd=1;dd<=block;dd++){ int val=dp[i]; if(i+dd<=n) { val=add(val,s[dd][i+dd]); } s[dd][i]=val; } } cout<<dp[1]; } int main(){ Input(); }
#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...