Submission #1083814

#TimeUsernameProblemLanguageResultExecution timeMemory
1083814NEMO_Job Scheduling (CEOI12_jobs)C++17
0 / 100
294 ms29108 KiB
#include <bits/stdc++.h>

#define ll long long
#define FAST                   \
	ios::sync_with_stdio(false); \
	cin.tie(NULL);
#define ld long double
// #define pb(x) push_back(x)
#define set(arr, x) memset(arr, x, sizeof(arr))
#define F0R(i, a) for (int i = 0; i < a; i++)
#define F1R(i, a) for (int i = 1; i <= a; i++)
#define all(x) (x).begin(), (x).end() // sort(all(vec))
// vec.resize(unique(all(vec)) - vec.begin());
// iota(p.begin(), p.end(), 0);

using namespace std;

int n, d, m;

pair<bool, vector<vector<int>>> valid(vector<pair<int, int>> &jobs, int mnMachine)
{
	vector<vector<int>> schedule(n);
	int need = 0;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if(jobs[need].first > i) break;
			if(jobs[need].first + d >= i)
			{
				schedule[i - 1].push_back(jobs[need++].second);
			}
			else
			{
				make_pair(false, schedule);
			}
			if (need == m) return make_pair(true, schedule);
		}
	}
	return make_pair(false, schedule);
}
void solve()
{
	cin >> n >> d >> m;
	vector<pair<int, int>> jobs(m);
	for (int i = 0; i < m; i++)
	{
		cin >> jobs[i].first;
		jobs[i].second = i + 1;
	}
	sort(all(jobs));
	vector<vector<int>> result;
	int l = 1, r = m;
	while (l < r)
	{
		int mid = (l + r) / 2;
		pair<bool, vector<vector<int>>> res = valid(jobs, mid);
		if (res.first)
		{
			r = mid;
			result = res.second;
		}
		else
		{
			l = mid + 1;
		}
	}
	cout << l << endl;
	for (int i = 0; i < n; i++) {
		for (int &idx : result[i]) cout << idx << " ";
		cout << 0 << "\n";
	}
}

int main()
{
	FAST;
	int t = 1;
	// cin >> t;
	while (t--)
	{
		solve();
	};
	// solve();
	// cout << (2^4^5);
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...