ICPC 순위
시간 제한1초메모리 제한128 MB
제출 기록으로 팀별 해결 수와 페널티 시간을 계산해 순위를 정하고 동점을 표시해 출력합니다.
문제
ICPC(International Collegiate Programming Contest)의 제출 기록을 읽어 팀 순위를 정하는 프로그램을 작성한다.
기록은 제출한 순서대로 나열된 제출 정보의 목록이다. 각 기록은 경과 시간, 팀 번호, 문제 번호, 채점 결과 네 항목으로 이루어진다. 경과 시간은 대회 시작부터 그 제출까지 흐른 시간이다. 채점 결과는 제출한 프로그램이 정답인지 오답인지 알려주고, 오답이면 어떤 종류의 오류가 나왔는지도 알려준다.
팀 순위는 아래 규칙으로 정한다. 여기 적은 규칙은 실제 ICPC 세계 대회와 지역 대회에서 쓰는 규칙에서 세부 규칙 몇 가지를 덜어낸 것이다.
- 더 많은 문제를 푼 팀이 더 높은 순위를 받는다.
- 푼 문제 수가 같으면 총 소요 시간이 더 적은 팀이 더 높은 순위를 받는다.
- 푼 문제 수가 같고 총 소요 시간도 같은 팀이 둘 이상이면 그 팀들은 같은 순위를 받는다.
총 소요 시간은 푼 문제마다 계산한 소요 시간을 모두 더한 값이다. 어떤 문제의 소요 시간은 정답 제출의 경과 시간에, 그 문제에서 그전까지 오답 판정을 받은 제출 하나마다 페널티 20분을 더한 값이다.
풀지 못한 문제의 소요 시간은 0이다. 그래서 오답 제출이 여러 번 있어도 페널티는 붙지 않는다.
한 팀이 어떤 문제를 맞힌 뒤에 같은 문제를 다시 제출하는 일은 없다고 가정해도 된다.
입력
입력은 다음 형식의 데이터셋이 여러 개 이어진 것이다. 마지막 데이터셋 다음 줄에는 0이 네 개 주어진다.
M T P R
m1 t1 p1 j1
m2 t2 p2 j2
.....
mR tR pR jR
각 데이터셋의 첫 줄에는 정수 , , , 이 주어진다. 은 대회 시간, 는 팀 수, 는 문제 수, 은 제출 기록 수이다. 이 값들은 , , , 을 만족한다. 팀 번호는 1부터 까지, 문제 번호는 1부터 까지이다.
이어지는 개의 줄에는 제출 기록 하나가 정수 네 개 , , , ()로 주어진다. 는 경과 시간, 는 팀 번호, 는 문제 번호, 는 채점 결과이고, 가 0이면 정답, 나머지 값은 오답을 뜻한다. 이 값들은 , , , 을 만족한다.
경과 시간은 분 단위로 반올림한 값이다.
제출 기록은 제출한 순서대로 주어진다. 즉 이면 번째 제출이 번째 제출보다 먼저 이루어졌고 이다. 이 사실을 쓰면 1분이 안 되는 차이로 두 팀의 순위를 가릴 수 있는 경우도 있다. 하지만 순위를 정할 때 그 정보는 쓰지 않는다. 순위는 분 단위 시간만으로 정한다.
출력
각 데이터셋마다 순위가 높은 팀부터 차례로 팀 번호(1부터 까지)를 한 줄에 출력한다. 두 팀 번호 사이의 구분자는 쉼표이다. 순위가 같은 두 팀 사이의 구분자는 등호이다. 순위가 같은 팀은 팀 번호가 큰 것부터 나열한다.