Submission #1148348

#TimeUsernameProblemLanguageResultExecution timeMemory
1148348boboTrains (BOI24_trains)C++20
0 / 100
39 ms13512 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "debug.h" #else #define debug(...) 42 #endif #define int long long #define all(x) x.begin(), x.end() const int mod = 1000000007; int32_t main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; map<pair<int, int>, set<pair<int, int>>> mp; vector<int> d(n+1), x(n+1); for (int i = 1; i <= n; i++) { cin >> d[i] >> x[i]; if (d[i] > n) continue; int dest = i + x[i] * d[i]; if (dest > n) dest = n - (n % d[i]); mp[{d[i], i % d[i]}].insert({i, dest}); } vector<int> adj[n+1]; for (auto& [pr, st] : mp) { auto [gap, md] = pr; vector<int> diff(n/gap + 5, 0); auto conv = [&] (int x) { return (x - md) / gap + 1; }; auto rec = [&] (int x) { return (x - 1) * gap + md; }; for (auto& [start, dest] : st) { diff[conv(start)]++; diff[conv(dest) + 1]--; } for (int i = 2; i <= n / gap + 3; i++) { diff[i] += diff[i-1]; if (diff[i]) { int cur = rec(i); adj[cur].push_back(cur - gap); } } } vector<int> dp(n+1, 0); dp[1] = 1; int ans = 1; for (int i = 2; i <= n; i++) { for (auto& prv : adj[i]) dp[i] = dp[i] + dp[prv] % mod; ans = ans + dp[i] % mod; } cout << ans << '\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...