Submission #711422

#TimeUsernameProblemLanguageResultExecution timeMemory
711422narvaloJob Scheduling (CEOI12_jobs)C++17
100 / 100
333 ms20428 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, d, m; cin >> n >> d >> m; vector<int> a(m); for (int i = 0; i < m; i++) { cin >> a[i]; --a[i]; } vector<int> order(m); iota(order.begin(), order.end(), 0); sort(order.begin(), order.end(), [&](int i, int j) { return a[i] < a[j]; }); vector<vector<int>> days(n); auto Can = [&](int machines) { for (int i = 0; i < n; i++) { days[i].clear(); } int day = 0; int emptyMachines = machines; for (int id = 0; id < m; id++) { int cur = a[order[id]]; if (cur > day) { day = cur; emptyMachines = machines; } else if (cur + d < day) { return false; } days[day].push_back(order[id]); if (--emptyMachines == 0) { day++; emptyMachines = machines; } } return true; }; int low = 1, high = 1000000000; while (low <= high) { int mid = low + (high - low) / 2; if (Can(mid)) { high = mid - 1; } else { low = mid + 1; } } Can(high + 1); cout << high + 1 << '\n'; for (int i = 0; i < n; i++) { for (int j = 0; j < (int) days[i].size(); j++) { if (j > 0) { cout << " "; } cout << 1 + days[i][j]; } if ((int) days[i].size() > 0) { cout << " "; } cout << "0\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...