Submission #1300827

#TimeUsernameProblemLanguageResultExecution timeMemory
1300827sz_3312Job Scheduling (CEOI12_jobs)C++17
100 / 100
136 ms20152 KiB
#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 timeMemoryGrader output
Fetching results...