제출 #1150834

#제출 시각아이디문제언어결과실행 시간메모리
1150834jim_xJob Scheduling (CEOI12_jobs)C++20
100 / 100
264 ms26388 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; int N, D, M; pair<int, vector<vector<int>>> is_feasible(const vector<pair<int, int>>& jobs, int machine_count) { vector<vector<int>> schedule(N); int req_num = 0; for (int day = 1; day <= N; ++day) { for (int i = 0; i < machine_count; ++i) { if (jobs[req_num].first > day) { break; } if (jobs[req_num].first + D >= day) { schedule[day - 1].push_back(jobs[req_num].second); req_num++; } else { return {0, schedule}; } if (req_num == M) { return {1, schedule}; } } } return {0, schedule}; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> N >> D >> M; vector<pair<int, int>> jobs(M); for (int i = 0; i < M; ++i) { cin >> jobs[i].first; jobs[i].second = i + 1; } sort(jobs.begin(), jobs.end()); vector<vector<int>> result; int l = 1, r = M; while (l < r) { int machine_num = (l + r) / 2; auto cur_result = is_feasible(jobs, machine_num); if (cur_result.first) { r = machine_num; result = cur_result.second; } else { l = machine_num + 1; } } cout << l << "\n"; for (int i = 0; i < N; ++i) { for (int idx : result[i]) { cout << idx << " "; } cout << "0\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...