Submission #743203

#TimeUsernameProblemLanguageResultExecution timeMemory
743203vjudge1Job Scheduling (CEOI12_jobs)C++17
0 / 100
279 ms20604 KiB
#include <bits/stdc++.h> using namespace std; int day, deadline, work; const int N = 100001; int workday[N] = {}; vector<int> general; vector<int> li[N] = {}; bool solve(int maxmachine) { int workleft = work; int dayy = 1; vector<int> soil = general; while (workleft > 0 && !soil.empty()) { for (int i = 0; i < maxmachine; ++i) { if (soil.back() + deadline < dayy) return false; else { workleft--; soil.pop_back(); } } dayy++; } return true; } bool solveprint(int maxmachine) { int workleft = work; int dayy = 1; vector<int> soil = general; while (workleft > 0 && !soil.empty()) { for (int i = 0; i < maxmachine; ++i) { if (soil.back() + deadline < dayy) return false; else { cout << li[soil.back()].back() << " "; li[soil.back()].pop_back(); workleft--; soil.pop_back(); } } dayy++; cout << "0\n"; } for(int i = dayy;i <= day;++i) cout << "0\n"; return true; } int main() { int a; cin >> day >> deadline >> work; for (int i = 0; i < work; ++i) { cin >> a; workday[a]++; li[a].push_back(i+1); } int maxwork = -1; for (int i = 1; i <= day - deadline; ++i) { maxwork = max(maxwork, workday[i]); for (int j = 1; j <= workday[i]; ++j) general.push_back(i); } reverse(general.begin(), general.end()); int l = 1, r = work; while (l < r) { int mid = (l + r) / 2; if (solve(mid)) r = mid; else l = mid + 1; } cout << l << "\n"; solveprint(l); } /* 8 2 12 1 2 4 2 1 3 5 6 2 3 6 4 */
#Verdict Execution timeMemoryGrader output
Fetching results...