제출 #977999

#제출 시각아이디문제언어결과실행 시간메모리
977999vjudge1Job Scheduling (CEOI12_jobs)C++17
100 / 100
400 ms13648 KiB
#include<iostream> #include<algorithm> using namespace std; int n, d, m; // available days, max delay, job count pair<int, int> arrive[1000001]; // when the jobs come in bool isok(int machines) { int current = 0; for (int i = 1; i <= n; i++) { int machines_left = machines; while (machines_left > 0 && current < m && arrive[current].first <= i) { if (i - arrive[current].first > d) { return false; } machines_left--; current++; } } return current == m; // can complete all jobs } int main() { cin >> n >> d >> m; for (int i = 0; i < m; i++) { cin >> arrive[i].first; arrive[i].second = i + 1; } sort(arrive, arrive + m); int left = 1, right = m; int ans = 1; while (left <= right) { int mid = (left + right) / 2; // bsearch for how many machines needed if (isok(mid)) { ans = mid; right = mid - 1; } else { left = mid + 1; } } cout << ans << endl; int current = 0; for (int i = 1; i <= n; i++) { int machines_left = ans; while (machines_left > 0 && current < m && arrive[current].first <= i) { cout << arrive[current].second << " "; machines_left--; current++; } cout << 0 << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...