호주식 투표

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

요약
여러 차례에 걸쳐 선호 투표를 시뮬레이션한다. 매 라운드마다 최하위 후보를 탈락시키고 그 표를 이전해, 과반을 얻은 후보가 나오거나 동점이 될 때까지 센다.
난이도

보통10점 중 4점

유형
시뮬레이션, 구현, 배열, 그리디
정답자
아직 제출이 없습니다

문제

호주식 투표에서는 각 유권자가 모든 후보를 선호하는 순서대로 순위를 매긴다. 개표는 다음과 같이 라운드로 진행된다.

  1. 먼저 각 투표용지에서 1순위로 적힌 후보의 표만 센다.
  2. 어떤 후보가 전체 표의 50%를 초과하여 얻으면, 그 후보가 당선된다.
  3. 그렇지 않으면, 가장 적은 표를 받은 후보(동점이면 해당하는 모든 후보)를 탈락시킨다. 탈락한 후보에게 갔던 각 투표용지는, 그 용지에서 아직 탈락하지 않은 후보 중 가장 높은 순위의 후보에게 다시 집계된다.
  4. 한 후보가 50%를 초과하는 표를 얻거나, 남은 모든 후보의 득표수가 같아질(동점) 때까지 이 과정을 반복한다.

입력

첫째 줄에 후보의 수 nn (1≤n≤201 \le n \le 20)이 주어진다. 다음 nn개의 줄에는 후보의 이름이 한 줄에 하나씩 주어진다. 이름은 최대 80자이며 공백을 포함한 모든 출력 가능한 문자를 담을 수 있다. 그 뒤로 최대 1000개의 투표용지가 한 줄에 하나씩 주어진다. 각 투표용지에는 11부터 nn까지의 정수가 임의의 순서로 적혀 있으며, 첫 번째 정수가 1순위, 두 번째 정수가 2순위, 이런 식으로 이어진다.

출력

당선자의 이름을 한 줄에 출력한다. 만약 동점으로 끝나면, 동점인 모든 후보의 이름을 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.

예제4

  1. 예제 1

    입력
    3
    John Doe
    Jane Smith
    Sirhan Sirhan
    1 2 3
    2 1 3
    2 3 1
    1 2 3
    3 1 2
    
    예상 출력
    John Doe
    
  2. 예제 2

    입력
    1
    Alice
    1
    
    예상 출력
    Alice
    
  3. 예제 3

    입력
    3
    Alpha
    Beta
    Gamma
    1 2 3
    1 3 2
    1 2 3
    2 1 3
    
    예상 출력
    Alpha
    
  4. 예제 4

    입력
    2
    Ada
    Bob
    1 2
    2 1
    
    예상 출력
    Ada
    Bob