#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int days_num, delay, jobs_num;
cin >> days_num >> delay >> jobs_num;
vector<vector<int>> jobs(days_num);
for (int i = 0; i < jobs_num; i++){
int date;
cin >> date;
jobs[date - 1].push_back(i);
}
auto check = [&](int res, vector<vector<int>> &tmp_schedule) -> bool {
queue<pair<int, int>> cands;
for (int i = 0; i < days_num; i++){
for (int job : jobs[i]) cands.push({job, i});
for (int j = 0; !cands.empty() && j < res; j++){
int job = cands.front().first;
int date = cands.front().second;
cands.pop();
if (date + delay < i) return false;
tmp_schedule[i].push_back(job);
}
}
return cands.empty();
};
vector<vector<int>> final_schedule(days_num);
int low = 0, high = jobs_num, ans = -1;
while (low <= high){
int mid = (low + high) / 2;
vector<vector<int>> tmp_schedule(days_num);
if (check(mid, tmp_schedule)){
high = mid - 1;
ans = mid;
final_schedule = move(tmp_schedule);
}
else low = mid + 1;
}
cout << ans << "\n";
for (int i = 0; i < days_num; i++){
for (int job : final_schedule[i]) cout << job + 1 << " ";
cout << "0\n";
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |