# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
260093 | tincamatei | Job Scheduling (CEOI12_jobs) | C++14 | 349 ms | 24184 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
const int MAX_M = 1000000;
const int MAX_N = 100000;
struct Request {
int id, submit, assigned;
}requests[MAX_M];
bool cmp(Request a, Request b) {
return a.submit < b.submit;
}
bool check(int N, int D, int M, int K) {
int lastjob = 0;
for(int i = 1; i <= N; ++i) {
int used = 0;
while(lastjob < M && requests[lastjob].submit <= i && used < K) {
if(requests[lastjob].submit + D < i)
return false;
requests[lastjob].assigned = i;
++lastjob;
++used;
}
}
return true;
}
std::vector<int> jobs[1+MAX_N];
int main() {
int N, D, M;
scanf("%d%d%d", &N, &D, &M);
for(int i = 0; i < M; ++i) {
scanf("%d", &requests[i].submit);
requests[i].id = i + 1;
}
std::sort(requests, requests + M, cmp);
int st = 0, dr = M + 1;
while(dr - st > 1) {
int mid = (st + dr) / 2;
if(check(N, D, M, mid))
dr = mid;
else
st = mid;
}
printf("%d\n", dr);
for(int i = 0; i < M; ++i)
jobs[requests[i].assigned].push_back(requests[i].id);
for(int i = 1; i <= N; ++i) {
for(auto it: jobs[i])
printf("%d ", it);
printf("0\n");
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |