만드는 중입니다

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

RCV 단순화

면접 대비

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

요약
후보별 첫 순위 득표 수가 주어질 때, 어떤 후순위 배정에서도 당선될 수 없는 후보를 찾습니다.
난이도

보통10점 중 5점

유형
정렬, 누적 합, 해시맵, 그리디
정답자
아직 제출이 없습니다

문제

다음은 Ballotpedia의 글이다 [ https://ballotpedia.org/Ranked-choice_voting_(RCV) ]:

대체로 단일 당선자를 뽑는 선거에서 순위 투표(RCV)는 다음과 같이 진행된다.

  1. 유권자는 투표지에 해당 직책의 후보들을 선호하는 순서대로 매긴다.
  2. 어떤 후보가 첫 순위 득표의 과반(50퍼센트에 1표를 더한 수)을 얻으면 그 후보가 당선된다.
  3. 반대로 첫 순위 득표에서 과반을 얻은 후보가 없으면 첫 순위 득표가 가장 적은 후보가 탈락한다.
  4. 탈락한 후보의 첫 순위 표는 모두 빼고, 그 투표지에 적힌 두 번째 순위 후보를 한 단계 올린다.
  5. 조정된 득표수를 다시 집계하여 과반을 얻은 후보가 있는지 확인한다.
  6. 투표 총수의 과반을 얻은 후보가 나올 때까지 이 과정을 반복한다.

참고: 첫 순위 득표가 가장 적은 후보가 여럿 동점이면 그 후보들이 모두 탈락한다. 따라서 탈락하지 않은 후보는 탈락한 후보보다 첫 순위 득표가 최소 한 표 이상 많아야 한다.

각 후보의 첫 순위 득표율 정보는 받았지만, 후보들이 두 번째, 세 번째 순위에 어떻게 적혔는지는 알지 못한다. 당선될 가능성이 전혀 없는 후보를 걸러내는 프로그램을 작성하라. 더 정확히는, 후보 집합의 현재 득표수가 주어졌을 때 당선될 수 없는 후보들의 집합을 찾아라.

입력

첫 줄에 투표 수 N (1 ≤ N ≤ 100,000)이 주어진다. 이어지는 N개의 줄에는 각 유권자가 첫 번째로 투표한 후보의 이름이 한 줄에 하나씩 주어진다. 후보 이름은 첫 번째 열부터 시작하며, 대소문자 영문자 1자 이상 25자 이하로 이루어진다.

출력

첫 줄에 당선될 수 없는 후보의 수 C를 양의 정수로 출력한다. 나머지 C개의 줄에는 당선될 수 없는 후보의 이름을 사전순(오름차순)으로 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    5
    Alice
    Alice
    Bob
    Bob
    Carol
    
    예상 출력
    1
    Carol
    
  2. 예제 2

    입력
    2
    Alice
    Bob
    
    예상 출력
    2
    Alice
    Bob