만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

막대 놀이

면접 대비

시간 제한2초메모리 제한512 MB

요약
길이별 막대 개수가 주어질 때, 각 막대를 최대 한 번 사용해 만들 수 있는 직사각형 개수의 최댓값을 구한다.
난이도

보통10점 중 4점

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

문제

색깔 있는 작은 막대로 하는 놀이는 여러 가지가 있다. 이 문제에서 다루는 놀이는 막대로 직사각형을 만드는 것이다. 길이가 여러 가지인 막대 집합을 받아 바닥에 직사각형을 그리는데, 막대를 직사각형의 변으로 쓴다. 막대 하나는 직사각형 하나에만 쓸 수 있고, 직사각형의 한 변은 막대 하나로 이룬다. 아이 두 명이 똑같은 막대 집합을 하나씩 받고, 직사각형을 더 많이 그린 아이가 이긴다.

네 변의 길이가 같은 정사각형도 직사각형으로 센다.

길이가 정수인 막대 집합이 주어질 때, 그릴 수 있는 직사각형의 최대 개수를 구하는 프로그램을 작성하라.

입력

입력은 여러 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 집합에 들어 있는 서로 다른 막대 길이의 개수 NN이 주어진다 (1≤N≤10001 \le N \le 1000). 이어지는 NN개의 줄에는 각각 정수 두 개 CiC_i와 ViV_i가 주어진다. CiC_i는 막대의 길이이고 (1≤Ci≤100001 \le C_i \le 10000), ViV_i는 그 길이인 막대의 개수다 (1≤Vi≤10001 \le V_i \le 1000). 한 테스트 케이스에서 같은 길이는 두 번 나오지 않으므로 CiC_i는 모두 다르다. 입력의 마지막 줄은 N=0N = 0이며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 그 막대 집합으로 만들 수 있는 직사각형의 최대 개수를 한 줄에 하나씩 출력하라.

예제5

  1. 예제 1

    입력
    1
    10 7
    4
    50 2
    40 2
    30 4
    60 4
    5
    15 3
    6 3
    12 3
    70 5
    71 1
    0
    
    예상 출력
    1
    3
    2
    
  2. 예제 2

    입력
    1
    5 1
    0
    
    예상 출력
    0
    
  3. 예제 3

    입력
    1
    7 2
    0
    
    예상 출력
    0
    
  4. 예제 4

    입력
    1
    3 4
    0
    
    예상 출력
    1
    
  5. 예제 5

    입력
    2
    1 2
    10000 2
    0
    
    예상 출력
    1