제출 #1312017

#제출 시각아이디문제언어결과실행 시간메모리
1312017quacksireJob Scheduling (CEOI12_jobs)C++20
100 / 100
475 ms20480 KiB
#include <bits/stdc++.h> using namespace std; struct Job { int day, idx; }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, D, M; cin >> N >> D >> M; vector<Job> array(M); for (int i = 0; i < M; ++i) { cin >> array[i].day; array[i].idx = i + 1; } int lo = 1, hi = M; int best = M; auto work = [&](int k) { vector<int> temp(N+1, 0); sort(array.begin(), array.end(), [](Job a, Job b){ return a.day < b.day; }); for (auto& job : array) { bool done = false; for (int d = job.day; d <= min(N, job.day + D); ++d) { if (temp[d] < k) { temp[d]++; done = true; break; } } if (!done) return false; } return true; }; while (lo <= hi) { int mid = (lo + hi) / 2; if (work(mid)) { best = mid; hi = mid - 1; } else { lo = mid + 1; } } vector<vector<int>> ans(N+1); vector<int> cnt(N+1, 0); sort(array.begin(), array.end(), [](Job a, Job b){ return a.day < b.day; }); for (auto& job : array) { for (int d = job.day; d <= min(N, job.day + D); ++d) { if (cnt[d] < best) { ans[d].push_back(job.idx); cnt[d]++; break; } } } cout << best << '\n'; for (int d = 1; d <= N; ++d) { for (int id : ans[d]) cout << id << ' '; cout << 0 << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...