문제 5634 · 메가 II
정비 주기가 있는 생산 라인
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
어느 공장에 1번부터 K번까지 번호가 붙은 기계 K대가 있다. 작업 N개가 순서대로 도착한다. i번째 작업은 (i-1)번째 작업이 도착하고 g_i분 뒤에 도착하며, 첫 번째 작업은 시각 0에서 g_1분 뒤에 도착한다. 즉 i번째 작업의 도착 시각은 g_1+…+g_i이다. i번째 작업의 가공 시간은 p_i분이다. 작업은 반드시 도착 순서대로 시작한다. 어떤 작업도 앞선 작업의 시작 시각보다 먼저 시작할 수 없으며, 같은 시각에 시작하는 것은 허용된다. 각 작업은 다음 규칙으로 기계에 배정된다. 먼저 시작 시각 s를 정한다. s는 그 작업의 도착 시각 이상이고, 앞선 작업의 시작 시각 이상이며, 그 시각에 사용 가능한 기계가 하나 이상 있는 가장 이른 시각이다. 그다음 시각 s에 사용 가능한 기계 중 번호가 가장 작은 기계에 작업을 배정한다. 모든 기계는 시각 0부터 사용 가능하다. 기계는 작업을 마치면 곧바로 쉬어야 하며 쉬는 동안에는 사용할 수 없다. 작업이 시각 s에 시작해 s+p에 끝나면, 기계는 보통 c분을 쉬고 s+p+c부터 다시 사용 가능하다. 단, 그 기계가 누적 L번째, 2L번째, 3L번째, … 작업을 마친 경우에는 정비를 위해 c분 대신 D분을 쉰다. 쉬는 시간이 끝나는 시각부터 그 기계는 사용 가능하며 그 시각도 포함한다. 각 작업이 배정된 기계 번호와 시작 시각을 입력 순서대로 출력하라.
입력
첫 줄에 다섯 정수 N K L c D가 공백으로 주어진다. 이어지는 N개의 줄에 i번째 줄마다 두 정수 g_i p_i가 주어진다. 1 ≤ N ≤ 200000, 1 ≤ K ≤ 200000, 1 ≤ L ≤ 1000000000, 0 ≤ c, D ≤ 1000000000, 0 ≤ g_i ≤ 1000000000, 1 ≤ p_i ≤ 1000000000이다. 모든 값은 정수이다.
출력
N개의 줄에 i번째 작업이 배정된 기계 번호와 시작 시각을 공백으로 구분해 출력한다.
예제 입력 1
4 2 2 1 5 0 3 1 2 1 2 1 1
예제 출력 1
1 0 2 1 1 4 2 4
예제 입력 2
1 1 1 0 0 5 3
예제 출력 2
1 5
예제 입력 3
3 1 2 2 10 0 1 0 1 0 1
예제 출력 3
1 0 1 3 1 14
힌트 펼치기
- 기계를 쉬는 중인 기계와 사용 가능한 기계로 나누어 힙 두 개로 관리한다.
- 시작 시각은 도착 시각과 앞 작업의 시작 시각 중 큰 값에서 출발하고, 사용 가능한 기계가 없으면 가장 먼저 쉬는 시간이 끝나는 시각으로 올린다.
관련 서재 장
알고리즘 분류
구현시뮬레이션우선순위 큐풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |