#include <bits/stdc++.h>
using namespace std;
struct Job {
int day, id;
};
int N, D, M;
vector<Job> jobs;
// Check feasibility using K machines (does NOT build schedule)
bool canFinish(int K) {
int ptr = 0;
for (int day = 1; day <= N; day++) {
for (int used = 0; used < K; used++) {
if (ptr == M) return true;
if (jobs[ptr].day > day)
break;
if (jobs[ptr].day + D < day)
return false;
ptr++;
}
}
return ptr == M;
}
// Build schedule once K is minimal
vector<vector<int>> buildSchedule(int K) {
vector<vector<int>> sched(N);
int ptr = 0;
for (int day = 1; day <= N; day++) {
for (int used = 0; used < K; used++) {
if (ptr == M) return sched;
if (jobs[ptr].day > day) break;
sched[day - 1].push_back(jobs[ptr].id);
ptr++;
}
}
return sched;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> N >> D >> M;
jobs.resize(M);
for (int i = 0; i < M; i++) {
cin >> jobs[i].day;
jobs[i].id = i + 1;
}
sort(jobs.begin(), jobs.end(),
[](const Job &a, const Job &b) {
return a.day < b.day;
});
int lo = 1, hi = M;
while (lo < hi) {
int mid = (lo + hi) / 2;
if (canFinish(mid)) hi = mid;
else lo = mid + 1;
}
int K = lo;
auto schedule = buildSchedule(K);
cout << K << "\n";
for (int day = 0; day < N; day++) {
for (int id : schedule[day])
cout << id << " ";
cout << 0 << "\n";
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |