제출 #545128

#제출 시각아이디문제언어결과실행 시간메모리
545128rainboyJob Scheduling (CEOI12_jobs)C11
100 / 100
155 ms17484 KiB
#include <stdio.h>

#define N	100000
#define M	1000000

int ii[M], hh[M], kk[N + 1], ll[N + 1], n, d, m;

int solve(int k, int print) {
	int h, i, j;

	if (!print)
		for (i = 0, j = 0; j < n; j++) {
			int k_;

			k_ = k;
			ll[j] = kk[j];
			while (i <= j && k_ >= ll[i])
				k_ -= ll[i++];
			if (i <= j)
				ll[i] -= k_;
			if (j - i >= d)
				return 0;
		}
	else
		for (i = 0, h = 0; i < n; i++) {
			int k_ = k;

			while (h < m && ii[hh[h]] <= i && k_--)
				printf("%d ", hh[h++] + 1);
			printf("0\n");
		}
	return 1;
}

int main() {
	int h, i, lower, upper;

	scanf("%d%d%d", &n, &d, &m);
	for (h = 0; h < m; h++) {
		scanf("%d", &ii[h]), ii[h]--;
		kk[ii[h]]++;
	}
	for (i = 1; i <= n; i++)
		ll[i] = ll[i - 1] + kk[i - 1];
	for (h = 0; h < m; h++)
		hh[ll[ii[h]]++] = h;
	lower = 0, upper = m;
	while (upper - lower > 1) {
		int k = (lower + upper) / 2;

		if (solve(k, 0))
			upper = k;
		else
			lower = k;
	}
	printf("%d\n", upper);
	solve(upper, 1);
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

jobs.c: In function 'main':
jobs.c:38:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   38 |  scanf("%d%d%d", &n, &d, &m);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
jobs.c:40:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |   scanf("%d", &ii[h]), ii[h]--;
      |   ^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...