Submission #1165883

#TimeUsernameProblemLanguageResultExecution timeMemory
1165883Math4Life2020Trains (BOI24_trains)C++20
100 / 100
207 ms239480 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<ll,ll>; const ll p = 1e9+7; const ll K = 300; const ll Nm = 2e5; ll pfs[K+1][Nm]; ll dp[Nm]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); ll N; cin >> N; vector<pii> vinp; for (ll i=0;i<N;i++){ ll d,x; cin >> d >> x; vinp.push_back({d,x}); } for (ll i=(N-1);i>=0;i--) { ll ans = 1; ll d = vinp[i].first; ll x = vinp[i].second; if (d>=1 && d<=K) { ll tmax = i+d*(x+1); if (tmax>=N) { tmax = N; } ans += p+pfs[d][i+d]-pfs[d][tmax]; } if (d>K) { for (ll T=(i+d);T<N && (T-i)/d<=x; T+=d) { ans += dp[T]; } } ans = ans%p; dp[i]=ans; for (ll k=1;k<=K;k++) { pfs[k][i]=(ans+pfs[k][i+k])%p; } } cout << dp[0] <<"\n"; }
#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...