Submission #838979

#TimeUsernameProblemLanguageResultExecution timeMemory
838979Peter_PeterJob Scheduling (CEOI12_jobs)C++17
100 / 100
220 ms23536 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); 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]; } vector<int> order(M); iota(order.begin(), order.end(), 1); sort(order.begin(), order.end(), [&](int i, int j) -> bool { return A[i - 1] > A[j - 1]; }); sort(A.begin(), A.end(), greater<int>()); int lo = 1, hi = M; while(lo < hi) { int mid = lo + (hi - lo) / 2; int mx_d = 0, day = 1; vector<int> B = A; while(!B.empty()) { int mu = 0; while(mu < mid && !B.empty() && B.back() <= day) { mx_d = max(mx_d, day - B.back()); B.pop_back(); mu++; } day++; } if(mx_d <= D) { hi = mid; } else { lo = mid + 1; } } vector<vector<int>> ans(N); int day = 1; while(!A.empty()) { int mu = 0; while(mu < lo && !A.empty() && A.back() <= day) { ans[day - 1].push_back(order.back()); A.pop_back(); order.pop_back(); mu++; } ans[day - 1].push_back(0); day++; } cout << lo << '\n'; for(int i = 0; i < N; i++) { if(ans[i].empty()) { cout << "0\n"; continue; } for(int j = 0; j < (int)ans[i].size(); j++) { cout << ans[i][j] << " \n"[j == (int)ans[i].size() - 1]; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...