RCV 단순화
면접 대비시간 제한1초메모리 제한1024 MB
후보별 첫 순위 득표 수가 주어질 때, 어떤 후순위 배정에서도 당선될 수 없는 후보를 찾습니다.
문제
다음은 Ballotpedia의 글이다 [ https://ballotpedia.org/Ranked-choice_voting_(RCV) ]:
대체로 단일 당선자를 뽑는 선거에서 순위 투표(RCV)는 다음과 같이 진행된다.
- 유권자는 투표지에 해당 직책의 후보들을 선호하는 순서대로 매긴다.
- 어떤 후보가 첫 순위 득표의 과반(50퍼센트에 1표를 더한 수)을 얻으면 그 후보가 당선된다.
- 반대로 첫 순위 득표에서 과반을 얻은 후보가 없으면 첫 순위 득표가 가장 적은 후보가 탈락한다.
- 탈락한 후보의 첫 순위 표는 모두 빼고, 그 투표지에 적힌 두 번째 순위 후보를 한 단계 올린다.
- 조정된 득표수를 다시 집계하여 과반을 얻은 후보가 있는지 확인한다.
- 투표 총수의 과반을 얻은 후보가 나올 때까지 이 과정을 반복한다.
참고: 첫 순위 득표가 가장 적은 후보가 여럿 동점이면 그 후보들이 모두 탈락한다. 따라서 탈락하지 않은 후보는 탈락한 후보보다 첫 순위 득표가 최소 한 표 이상 많아야 한다.
각 후보의 첫 순위 득표율 정보는 받았지만, 후보들이 두 번째, 세 번째 순위에 어떻게 적혔는지는 알지 못한다. 당선될 가능성이 전혀 없는 후보를 걸러내는 프로그램을 작성하라. 더 정확히는, 후보 집합의 현재 득표수가 주어졌을 때 당선될 수 없는 후보들의 집합을 찾아라.
입력
첫 줄에 투표 수 N (1 ≤ N ≤ 100,000)이 주어진다. 이어지는 N개의 줄에는 각 유권자가 첫 번째로 투표한 후보의 이름이 한 줄에 하나씩 주어진다. 후보 이름은 첫 번째 열부터 시작하며, 대소문자 영문자 1자 이상 25자 이하로 이루어진다.
출력
첫 줄에 당선될 수 없는 후보의 수 C를 양의 정수로 출력한다. 나머지 C개의 줄에는 당선될 수 없는 후보의 이름을 사전순(오름차순)으로 한 줄에 하나씩 출력한다.