제출 #1109190

#제출 시각아이디문제언어결과실행 시간메모리
1109190Captain_GeorgiaTrains (BOI24_trains)C++17
8 / 100
2076 ms2260 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod = 1e9 + 7; int32_t main () { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N; cin >> N; vector<array<int, 2>> arr(N + 1); vector<ll> dp(N + 1, 1); priority_queue<array<int, 2>> pq; for (int i = 1;i <= N;i ++) { cin >> arr[i][0] >> arr[i][1]; if (i + 1LL * arr[i][0] * arr[i][1] <= N) { pq.push({i + arr[i][0] * arr[i][1], i}); } else { pq.push({((N - i) / arr[i][0]) * arr[i][0] + i, i}); } } for (int i = N;i >= 1;i --) { while (pq.size() > 0) { auto it = pq.top(); // cout << i << " " << it[0] << " " << it[1] << "\n"; // _time ++; if (it[0] < i) break; pq.pop(); if (it[1] == i) continue; if (it[0] > i) { int fi = ((i - it[1]) / arr[it[1]][0]); if (fi * arr[it[1]][0] + it[1] < i) { continue; } dp[it[1]] = (dp[it[1]] + dp[i]) % mod; if (fi - 1 <= 0) { continue; } fi --; pq.push({fi * arr[it[1]][0] + it[1], it[1]}); } else { int fi = ((it[0] - it[1]) / arr[it[1]][0]); if (fi * arr[it[1]][0] + it[1] < i) { continue; } dp[it[1]] = (dp[it[1]] + dp[i]) % mod; if (fi - 1 <= 0) { continue; } fi --; pq.push({fi * arr[it[1]][0] + it[1], it[1]}); } } } cout << dp[1] << "\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...