Submission #1182935

#TimeUsernameProblemLanguageResultExecution timeMemory
1182935sosukeJob Scheduling (CEOI12_jobs)C++20
100 / 100
357 ms26448 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, d, m;
	std::cin >> n >> d >> m;
	std::vector<std::array<int, 2>> jobs(m);
	for (int i = 0; i < m; i++) {
		int day;
		std::cin >> day;
		jobs[i] = {day, i + 1};
	}

	std::sort(begin(jobs), end(jobs));
	std::vector<std::vector<int>> res;

	auto is_feasible = [&] (int machine_count) -> std::pair<bool, std::vector<std::vector<int>>> {
		std::vector<std::vector<int>> schedule(n);
		int req_num = 0;

		for (int day = 1; day <= n; day++) {
			for (int j = 0; j < machine_count; j++) {
				if (jobs[req_num][0] > day) {
					break;
				}
				if (jobs[req_num][0] + d >= day) {
					schedule[day - 1].push_back(jobs[req_num++][1]);
				} else {
					return {false, schedule};
				}

				if (req_num == m) {
					return {true, schedule};
				}
			}
		}
		return {false, schedule};
	};

	int lo = 1, hi = m;
	while (lo < hi) {
		int machine_num = (lo + hi) / 2;
		
		std::pair<bool, std::vector<std::vector<int>>> curr_result = is_feasible(machine_num);

		if (curr_result.first) {
			hi = machine_num;
			res = curr_result.second;
		} else {
			lo = machine_num + 1;
		}
	}

	std::cout << lo << '\n';
	for (int i = 0; i < n; i++) {
		for (int idx : res[i]) {
			std::cout << idx << " ";
		}
		std::cout << 0 << '\n';
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...