Submission #1237386

#TimeUsernameProblemLanguageResultExecution timeMemory
1237386zadniprovskaTrains (BOI24_trains)C++20
71 / 100
2095 ms4936 KiB
#include <bits/stdc++.h> using namespace std; #define ll int #define pll pair<ll, ll> const ll DIM = 1e5 + 7; const ll mod = 1e9 + 7; const ll sq = 400; ll dp[DIM]; map<pll, ll> s; vector< pair<pll, ll> > er[DIM]; int main(){ ios::sync_with_stdio(false);cin.tie(nullptr); cout.tie(nullptr); ll n; cin >> n; dp[1] = 1; for (int i=1; i<=n; i++) { ll d, x; cin >> d >> x; for (auto [p, val] : er[i]) { s[p] -= val; if (s[p] < 0) s[p] += mod; } for (auto [p, val] : s) { if (i%p.first == p.second) { dp[i] += val; dp[i] %= mod; } } if (d == 0) continue; x = min(x, (n-i)/d); if (x <= sq) { for (int j=i+d; j<=i + x*d; j+=d) { dp[j] += dp[i]; dp[j] %= mod; } } else { s[{d, i%d}] += dp[i]; s[{d, i%d}] %= mod; er[i + x*d + 1].push_back({{d, i%d}, dp[i]}); } } ll answer = 0; for (int i=1; i<=n; i++) { answer += dp[i]; answer %= mod; } cout << answer << endl; } ;
#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...