아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

작업 스케줄링

시간 제한1초메모리 제한128 MB

요약
시작 시각이 늦을수록 수행 시간이 길어지는 작업들이 있을 때, 전체 완료 시각을 최소로 하는 순서를 찾고 동일한 최솟값이 여럿이면 사전순으로 가장 앞선 순서를 출력한다.
난이도

보통10점 중 7점

유형
정렬, 그리디, 수학
정답자
아직 제출이 없습니다

문제

11번부터 nn번까지 번호가 매겨진, 서로 독립적이며 나눌 수 없는 작업 nn개가 있다. 이 작업들은 중간에 쉬는 시간 없이 어떤 순서로든 하나씩 차례대로 실행되며, 시작 시각은 t=0t = 0이다. 작업을 늦게 시작할수록 실행 시간이 길어진다. 즉, 작업 ii를 시각 tt에 시작하면 실행에 hi(t)=ait+bih_i(t) = a_i t + b_i의 시간이 걸리며, 여기서 0≤ai≤10 \le a_i \le 1, 0≤bi≤10 \le b_i \le 1이다. 따라서 각 작업은 시각을 tt에서 t+hi(t)=(1+ai) t+bit + h_i(t) = (1 + a_i)\,t + b_i로 진행시킨다.

전체 실행 시간은 마지막 작업이 끝나는 시각이다. 이 전체 실행 시간이 최소가 되도록 작업 순서를 정하는 것이 목표이다.

nn과 각 작업의 계수 aia_i, bib_i를 읽어, 전체 실행 시간을 최소로 만드는 작업 순서를 출력하는 프로그램을 작성하라. 전체 실행 시간이 최소가 되는 순서가 여러 개라면, 그중 사전순으로 가장 앞서는 것을 출력한다(작업 번호 수열을 앞에서부터 자리별로 비교한다).

입력

  • 첫째 줄에 작업의 개수 nn (1≤n≤10,000)(1 \le n \le 10{,}000)이 주어진다.
  • 이어지는 nn개의 줄에는 각각 음이 아닌 실수 aia_i와 bib_i (0≤ai≤1, 0≤bi≤1)(0 \le a_i \le 1,\ 0 \le b_i \le 1)가 공백 하나로 구분되어 주어진다. 각 수는 소수점 아래 정확히 여섯 자리까지 표기된 표준 십진수 형식이다. 이 nn개 줄 중 ii번째 줄은 작업 ii의 계수를 나타낸다.

출력

선택한 작업 순서를 1,…,n1, \dots, n의 순열로, 한 줄에 작업 번호 하나씩 출력한다. 전체 실행 시간을 최소로 만드는 순서가 둘 이상이면, 그중 사전순으로 가장 앞서는 순서를 출력한다.

예제2

  1. 예제 1

    입력
    5
    0.002000 0.003000
    0.016000 0.001000
    0.100000 0.300000
    0.016000 0.005000
    0.030000 0.060000
    
    예상 출력
    2
    4
    1
    5
    3
    
  2. 예제 2

    입력
    3
    0.100000 0.200000
    0.200000 0.400000
    0.050000 0.100000
    
    예상 출력
    1
    2
    3