제출 #207114

#제출 시각아이디문제언어결과실행 시간메모리
207114zvonimir11Job Scheduling (CEOI12_jobs)C++17
0 / 100
51 ms65540 KiB
#include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <queue> using namespace std; int n, m, d, a[100005], b[100005]; queue<int> dn[100005]; bool f(int x) { queue<int> p; for(int i = 1; i <= n; ++i) { int o = x; while(!p.empty() && o > 0) { if(i - p.front() > d) return 0; --o; p.pop(); } for(int j = 0; j < b[i]; ++j) { if(o > 0) { --o; continue; } p.push(i); } } if(p.size() > 0) return 0; return 1; } int main() { cin >> n >> d >> m; for(int i = 0; i < m; ++i) cin >> a[i], ++b[a[i]], dn[a[i]].push(i + 1); f(1); int lo = 1, hi = 100000; while(lo < hi) { int md = (hi + lo) / 2; if(f(md)) hi = md; else lo = md + 1; } int x = lo; cout << lo << endl; queue<int> p; for(int i = 1; i <= n; ++i) { int o = x; while(!p.empty() && o > 0) { --o; cout << dn[p.front()].front() << " ", dn[p.front()].pop(); p.pop(); } for(int j = 0; j < b[i]; ++j) { if(o > 0) { --o; cout << dn[i].front() << " ", dn[i].pop(); continue; } p.push(i); } cout << "0 \n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...