# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1238270 | radaiosm7 | Job Scheduling (CEOI12_jobs) | C++20 | 156 ms | 13632 KiB |
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int n, d, m, day, l, r, ans;
vector<int> requests[100005];
queue<pair<int, int> > q;
bool ok(int x, bool print=false) {
while (!q.empty()) q.pop();
for (int i=1; i <= n; ++i) {
for (int request : requests[i]) q.push(make_pair(i, request));
int j = 1;
while (!q.empty() && j <= x) {
int request = q.front().Y;
q.pop();
if (print) printf("%d ", request);
++j;
}
if (print) printf("0\n");
if (!q.empty() && q.front().X == i-d) return false;
}
return true;
}
int main() {
scanf("%d%d%d", &n, &d, &m);
for (int i=1; i <= m; ++i) {
scanf("%d", &day);
requests[day].push_back(i);
}
l = 1;
r = m;
ans = -1;
while (l <= r) {
int md = (l+r)/2;
if (ok(md)) {
r = md-1;
ans = md;
}
else l = md+1;
}
printf("%d\n", ans);
ok(ans, true);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |