문제 4599 · 킬로 IV
휴게 시간을 지키는 예약실
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 병원 예약실에는 진료실이 하나 있다. 하루의 시각은 기준 시각부터 지난 분을 나타내는 음이 아닌 정수로 표현한다. 예약실에는 N명의 환자가 도착하며, 각 환자의 도착 시각과 필요한 진료 시간이 미리 주어진다. 환자는 도착 시각이 빠른 순서로 검토하고, 도착 시각이 같으면 입력에 먼저 나온 환자부터 검토한다. 환자의 번호는 입력에 나온 순서대로 1번부터 N번까지다. 진료실은 시각 0부터 사용할 수 있다. 한 환자의 진료가 끝나면 C분 동안 정리해야 다음 환자의 진료를 시작할 수 있다. 정리는 휴게 시간과 겹쳐 진행할 수 있다. 병원은 시각 L부터 R 직전까지 휴게 시간을 가지며, 진료는 휴게 시간과 조금이라도 겹칠 수 없다. 시작 시각이 s이고 진료 시간이 d이면 진료 구간은 s 이상 s+d 미만이다. 따라서 L에 끝나는 진료와 R에 시작하는 진료는 허용된다. 각 환자를 검토할 때, 앞서 확정한 진료와 정리를 모두 마쳤고 해당 환자가 도착한 뒤인 시각 중 가장 이른 진료 시작 시각을 먼저 구한다. 그 시각에 시작하면 휴게 시간과 겹치는 경우에는 시작 시각을 R로 늦춘다. 이렇게 구한 시작 시각과 환자의 도착 시각의 차이가 W 이하이면 예약을 확정한다. 차이가 W보다 크면 그 환자는 예약하지 않고 떠난다. 예약하지 않은 환자는 진료실을 사용하지 않으며 정리 시간도 발생시키지 않는다. 이전에 확정한 예약을 취소하거나 다른 환자와 순서를 바꾸지 않는다. 휴게 시간 이후에는 진료 종료 시각에 별도의 상한이 없다. 모든 환자를 검토한 결과를 구하는 프로그램을 작성한다. 각 환자에게 확정된 시작 시각을 알려 주고, 예약하지 않은 환자는 -1로 표시한다.
입력
첫째 줄에 정수 N, C, W, L, R이 주어진다. 1 ≤ N ≤ 20,000, 0 ≤ C ≤ 30, 0 ≤ W ≤ 1,000,000, 0 ≤ L < R ≤ 1,000,000이다. 다음 N개 줄에 환자의 도착 시각 A_i와 진료 시간 D_i가 주어진다. 모두 정수이며 0 ≤ A_i ≤ 1,000,000, 1 ≤ D_i ≤ 30이다. 도착 시각은 감소하지 않는 순서로 주어진다.
출력
N개의 줄을 출력한다. i번째 줄에 i번 환자의 진료 시작 시각을 출력한다. 해당 환자가 예약하지 않았다면 -1을 출력한다.
예제 입력 1
5 2 4 10 15 0 4 3 3 8 3 9 1 15 2
예제 출력 1
0 6 -1 -1 15
예제 입력 2
4 0 0 5 9 3 2 5 1 9 3 9 1
예제 출력 2
3 -1 9 -1
힌트 펼치기
- 다음 진료를 시작할 수 있는 시각 하나를 유지한다.
- 예약이 거절되었을 때는 진료실의 사용 가능 시각을 바꾸지 않는다.
관련 서재 장
알고리즘 분류
구현시뮬레이션풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |