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

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

동아리 분반하기

면접 대비

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

요약
나이별 인원 수와 비율 R이 주어질 때, 각 구간에서 최대 인원이 최소 인원의 R배 이하가 되도록 나이 그룹을 최소 개수의 구간으로 나눈다.
난이도

보통10점 중 6점

유형
그리디, 투 포인터, 정렬, 구간
정답자
아직 제출이 없습니다

문제

ACM(All Can Meet) 동아리는 모든 연령대의 사람들이 함께 모여 삶의 경험을 나누며 서로에게 도움을 주자는 취지로 만들어졌다. 동아리가 큰 인기를 끌면서 모든 회원을 같은 시간, 같은 장소에 모으는 일이 사실상 불가능해졌고, 그래서 동아리는 회원들을 더 작은 분반으로 나누기로 했다. 분반이 한쪽으로 치우치지 않도록, 회장은 다음 세 가지 조건을 정했다.

  1. 나이가 같은 회원은 모두 같은 분반에 속해야 한다.
  2. 모든 회원은 정확히 하나의 분반에만 속해야 한다.
  3. 각 분반에서, 같은 나이를 가진 회원 수의 최댓값은 같은 나이를 가진 회원 수의 최솟값의 RR배를 넘지 않아야 한다. 여기서 분할 계수라고 부르는 RR는 1.0≤R≤2.01.0 \le R \le 2.0인 유리수이다.

세 번째 조건은 어떤 분반 안에 다른 나이 집단보다 지나치게 작은 나이 집단이 들어가 그 회원들이 소외감을 느끼는 일을 막아 준다.

예를 들어, mm살인 회원이 nn명 있는 집단을 [n, m]으로 나타내자. 분반 {[10, 50], [6, 45], [70, 12], [43, 23]}에서는 같은 나이 회원 수의 최댓값이 70, 최솟값이 6이므로, R=2.0R = 2.0일 때 70/6>2.070 / 6 > 2.0이 되어 세 번째 조건을 만족하지 않는다. 하지만 이 분반을 {[10, 50], [6, 45]}와 {[70, 12], [43, 23]}의 두 분반으로 나누면 세 조건을 모두 만족한다.

분할 계수 RR와 회원 목록이 주어질 때, 가능한 분반의 최소 개수를 구하여라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 정수 KK와 유리수 RR가 주어진다. KK는 동아리에 존재하는 서로 다른 나이의 수이고(1≤K≤1201 \le K \le 120), RR는 분할 계수이다(1.0≤R≤2.01.0 \le R \le 2.0). 이어지는 KK개의 줄에는 각각 두 정수 NN과 MM이 주어지며, 이는 동아리에 MM살인 회원이 NN명 있음을 뜻한다(1≤N≤100001 \le N \le 10000, 1≤M≤1201 \le M \le 120). 모든 나이는 서로 다르다. 입력의 끝은 K=0K = 0, R=0.0R = 0.0인 줄로 표시되며, 이 줄은 처리하지 않는다.

입력 값은 RR를 이진수로 표현할 때 생기는 오차가 정답에 영향을 주지 않도록 주어진다.

출력

각 테스트 케이스마다, 세 조건을 모두 만족하는 분반의 최소 개수를 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    5 1.7 
    100 7
    18 10
    11 17
    567 25
    62 34
    3 1.0
    12 18
    107 11
    250 57
    0 0.0
    
    예상 출력
    3
    3
    
  2. 예제 2

    입력
    1 1.5
    5 10
    0 0.0
    
    예상 출력
    1
    
  3. 예제 3

    입력
    6 2.0
    5 1
    6 2
    7 3
    8 4
    9 5
    10 6
    0 0.0
    
    예상 출력
    1