선거 자금 모금
시간 제한1초메모리 제한128 MB
여러 건의 기부 거래가 주어졌을 때, 각 기부자가 각 후보에게 준 금액과 전체 기부 금액을 합산한 뒤 후보별 합계가 $2100을 초과하거나 전체 합계가 $40000을 초과하는 기부자를 모두 찾아내는 문제다. 기부자와 후보를 키로 묶어 합계를 구하고 두 기준과 비교하는 것이 핵심이다.
문제
선거 운동을 시작하려면 돈이 필요합니다. 그렇지 않으면 성가신 로보콜, 상대 후보를 겨냥한 비방성 TV 광고, 유세 기간 내내 입어야 할 정장 값을 어떻게 치르겠습니까? 자금을 모으는 방법에는 전통적인 후원, 인터넷 광고, 값비싼 모금 만찬 등 여러 가지가 있습니다.
선거 후원금은 (안타깝게도 종종 정당하게) 후보에 대한 영향력을 사는 행위로 여겨질 수 있으므로, 선거 자금법은 한 사람이 후보나 정당에 낼 수 있는 후원금 총액에 제한을 둡니다. 이 법에 따르면 개인은 한 후보에게 최대 $2100까지, 그리고 전체적으로 최대 $40000까지 후원할 수 있습니다. 그러나 후원금이 여러 건의 거래로 나뉘면 누가 얼마를 후원했는지 정확히 파악하기 어렵습니다.
개별 후원 내역을 순서대로 입력받아 한도를 위반한 경우가 있는지, 있다면 어떤 후원자가 위반했는지 찾아내는 프로그램을 작성하세요.
입력
첫 줄에는 데이터 집합의 개수를 나타내는 정수 이 주어집니다. 이어서 다음 형식의 데이터 집합이 개 주어집니다.
각 데이터 집합의 첫 줄에는 세 정수 , , 가 주어지며, , , 입니다. 여기서 는 후보의 수(번호 ), 는 후원자의 수(번호 ), 는 거래의 수입니다.
그 뒤로 개의 줄이 이어지며, 각 줄에는 세 정수 , , 가 주어집니다. 이는 거래 에서 후원자 가 후보 에게 달러를 후원했다는 뜻입니다. 같은 후원자-후보 쌍이 여러 번 나올 수 있습니다.
출력
각 데이터 집합마다 먼저 Data Set x:를 한 줄에 출력합니다. 여기서 는 데이터 집합의 번호입니다. 그다음, 위반이 없으면 No violations를 한 줄에 출력하고, 위반이 있으면 Violators:를 한 줄에 출력한 뒤 한도를 하나라도 어긴 모든 후원자를 후원자 번호가 커지는 순서로 한 줄에 하나씩 출력합니다.
어떤 후원자가 한 후보에게 후원한 금액의 합이 $2100을 초과하거나, 모든 후보에게 후원한 금액의 총합이 $40000을 초과하면 그 후원자는 위반자입니다.