프로그래머여, 스스로 순위를 매겨라

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

요약
해결한 문제 수, 총 시간, 반올림한 기하평균 순으로 팀 순위를 정하고 정렬된 결과 표를 출력한다.
난이도

보통10점 중 4점

유형
정렬, 수학, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

프로그래밍 대회의 순위 프로그램을 구현하라.

각 팀은 최대 일곱 개의 문제를 푼다. 각 팀에 대해 문제마다 그 문제를 해결한 시각이 주어지며, 시각이 00이면 그 문제를 풀지 못한 것이다. 팀들의 순위를 매기고, 각 대회마다 정해진 형식의 결과표를 출력하는 것이 목표다.

입력

입력에는 하나 이상의 대회가 주어지고, 마지막에는 숫자 0 하나만 있는 줄이 나와 입력의 끝을 나타낸다.

각 대회는 팀의 수를 나타내는 양의 정수 cc (1≤c≤201 \le c \le 20)가 적힌 줄로 시작한다. 이어지는 cc개의 줄에는 각각 팀 이름과 일곱 문제의 해결 시각이 공백으로 구분되어 주어진다. 팀 이름은 1자 이상 10자 이하의 알파벳 문자로 이루어지며, 한 대회 안에서 모든 팀 이름은 서로 다르다. 각 시각은 500500 이하의 음이 아닌 정수이고, 00은 해당 문제를 풀지 못했음을 뜻한다.

팀의 순위는 다음 기준을 순서대로 적용해 정한다.

  1. 푼 문제 수가 많을수록 앞선다(시각이 00이 아닌 문제를 푼 것으로 본다).
  2. 푼 문제 수가 같으면, 총 소요 시간(일곱 시각의 합)이 적을수록 앞선다.
  3. 그것도 같으면, 00이 아닌 시각들의 기하평균(아래 방식으로 반올림한 값)이 작을수록 앞선다.

세 기준이 모두 같은 팀들은 동순위이며, 같은 등수를 부여받고 대문자와 소문자를 구분하는 사전식 순서로 나열된다. 한 팀의 등수는 항상 그 팀보다 (동순위가 아니라) 확실히 앞서는 팀의 수보다 하나 더 크다.

기하평균은 정수로 반올림하며, 순위 결정과 출력에는 이 반올림한 값만 사용한다. 일곱 시각이 모두 00이면 기하평균은 00이다. 그렇지 않고 00이 아닌 시각이 t1,t2,…,tnt_1, t_2, \ldots, t_n이면 기하평균은

exp⁡ ⁣(ln⁡t1+ln⁡t2+⋯+ln⁡tnn)\exp\!\left(\frac{\ln t_1 + \ln t_2 + \cdots + \ln t_n}{n}\right)

로 정의한다. 여기서 exp⁡x=ex\exp x = e^x이고 ln⁡x\ln x는 자연로그다. 반드시 이 정의를 사용하라. 기하평균을 구한 뒤에는 0.50.5를 더하고 소수 부분을 버려 정수로 반올림한다.

출력

각 대회에 대해 먼저 CONTEST k 형식의 머리글 줄을 출력한다. 여기서 kk는 11부터 시작하는 대회 번호다. 그다음 순위 순서대로 각 팀을 한 줄씩 출력한다.

각 팀 줄에는 순서대로 등수, 팀 이름, 푼 문제 수, 총 소요 시간, 반올림한 기하평균, 그리고 입력에 나온 순서 그대로의 일곱 개 개별 해결 시각을 적는다.

출력의 모든 줄은 같은 열 너비를 사용하며, 이 너비는 대회마다가 아니라 전체 입력을 통틀어 한 번만 계산한다. 각 열의 너비는 입력 전체에서 그 열에 나타나는 값 중 가장 넓은 값에 맞춘다. 각 필드는 그 너비에 맞도록 공백(탭 금지)으로 채운다. 팀 이름은 왼쪽 정렬, 나머지 필드는 모두 오른쪽 정렬이다. 등수는 항상 두 자리로 쓰며 필요하면 앞에 00을 붙인다. 일곱 개의 시각 열은 하나의 공통 너비를 공유한다. 어떤 줄도 공백으로 시작하거나 끝나지 않는다.

예제1

  1. 예제 1

    입력
    1
    Plutonians 123 234 345 456 167 278 389
    4
    Xap 0 0 0 0 0 0 0
    Foo 20 30 0 50 40 0 10
    Bar 0 50 20 0 10 40 30
    Baz 0 0 0 0 0 0 0
    3
    Venus 213 0 0 57 0 0 0
    Neptune 0 0 0 117 153 0 0
    Mars 0 150 0 0 0 0 120
    0
    
    예상 출력
    CONTEST 1
    01 Plutonians 7 1992 261 123 234 345 456 167 278 389
    CONTEST 2
    01 Bar        5  150  26   0  50  20   0  10  40  30
    01 Foo        5  150  26  20  30   0  50  40   0  10
    03 Baz        0    0   0   0   0   0   0   0   0   0
    03 Xap        0    0   0   0   0   0   0   0   0   0
    CONTEST 3
    01 Venus      2  270 110 213   0   0  57   0   0   0
    02 Mars       2  270 134   0 150   0   0   0   0 120
    02 Neptune    2  270 134   0   0   0 117 153   0   0