# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1027960 | 2024-07-19T12:00:04 Z | vjudge1 | Job Scheduling (CEOI12_jobs) | C++17 | 0 ms | 0 KB |
#include <bits/stdc++.h> using namespace std; int n, d, m, requests[1000000]; priority_queue<pair<int, int> > req; vector<int> res[100000]; int main() { cin>>n>>d>>m; for(int i = 0; i < m; i++) { cin>>requests[i]; requests[i]--; } int l = 0, r = n - 1; while(true) { int mid = (l + r) / 2; bool ok = true; for(int i = 0; i < m; i++) req.push({-requests[i], i}); for(int i = 0; i < n; i++) { res[i].clear(); for(int j = 0; j < mid; j++) { int k = -req.top().first; int idx = req.top().second; req.pop(); if(i + d > k) { ok = false; break; } res[i].push_back(idx); } } if(!ok) { l = mid + 1; continue; } req.clear(); ok = true; for(int i = 0; i < m; i++) req.push({-requests[i], i}); for(int i = 0; i < n; i++) { for(int j = 0; j < mid - 1; j++) { int k = -req.top().first; int idx = req.top().second; req.pop(); if(i + d > k) { ok = false; break; } } } req.clear(); if(!ok) { cout<<mid<<endl; for(int i = 0; i < n; i++) { for(auto j : res[i]) cout<<j + 1<<" "; cout<<0<<endl; } return 0; } r = mid - 1; } return 0; }