제출 #1258235

#제출 시각아이디문제언어결과실행 시간메모리
1258235hawashraJob Scheduling (CEOI12_jobs)C++20
100 / 100
663 ms20196 KiB
#include <bits/stdc++.h> using namespace std; #define vi vector<int> #define ii pair<int,int> #define vii vector<ii> #define ALL(x) begin(x), end(x) void solve() { int n, d, m; cin >> n >> d >> m; vii jobs(m); for (int i = 0; i < m; ++i) { cin >> jobs[i].first; jobs[i].second = i + 1; } sort(ALL(jobs)); vector<vi> dist(n + 1); auto feasible_and_fill = [&](int machines, bool fill) -> bool { if (fill) for (int i = 0; i <= n; ++i) dist[i].clear(); priority_queue<int, vi, greater<int>> pq; for (int i = 0; i < machines; ++i) pq.push(1); for (auto [a, id] : jobs) { auto t = pq.top(); pq.pop(); if (t > a + d) return false; int s = max(t, a); if (fill){ // schedule on day s dist[s].push_back(id); } // update machine: next free becomes s + 1 pq.push(s + 1); } return true; }; int l = 1, r = m, ans = m; while (l <= r) { int mid = (l + r) / 2; if (feasible_and_fill(mid, false)) { ans = mid; r = mid - 1; } else { l = mid + 1; } } feasible_and_fill(ans, true); cout << ans << '\n'; for (int day = 1; day <= n; ++day) { for (int id : dist[day]) cout << id << ' '; cout << "0\n"; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int tt = 1; while (tt--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...