Submission #525924

#TimeUsernameProblemLanguageResultExecution timeMemory
525924pawnedJob Scheduling (CEOI12_jobs)C++17
70 / 100
653 ms41648 KiB
#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
#define pb push_back
typedef long long ll;
typedef pair<int, int> ii;
typedef vector<int> vi;

int N, D, M;	// days, max delay, reqs
ii numbers[1000050];
vector<int> answers[1000050];

bool check(int n) {	// checks if n machines is enough
	for (int i = 0; i <= N; i++) {
		answers[i].clear();
	}
	int needed[N] = {0};
	int latest = 0;
	for (int i = 0; i < M; i++) {	// finds earliest possible time for each
		latest = max(latest, numbers[i].fi);
		while (needed[latest] == n)
			latest++;
		if (latest - numbers[i].fi > D)
			return false;
		needed[latest]++;
		answers[latest].pb(numbers[i].se);
	}
	return true;
}

int main() {
	cin>>N>>D>>M;
	for (int i = 0; i < M; i++) {
		cin>>numbers[i].fi;
		numbers[i].se = i + 1;
	}
	sort(numbers, numbers + M);
	int low = 0;
	int high = 1e9;
	int ans = -1;
	while (low <= high) {	// false, false, false, true, true, true
		int mid = (low + high) / 2;
		if (check(mid)) {
			ans = mid;
			high = mid - 1;
		}
		else {
			low = mid + 1;
		}
	}
	cout<<ans<<endl;
	check(ans);
	for (int i = 1; i <= N; i++) {
		for (int j : answers[i])
			cout<<j<<" ";
		cout<<0<<endl;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...