gRanks

시간 제한5초메모리 제한512 MB

요약
각 선수의 가중 순위 점수 중 상위 M개 합으로 총점을 구해 동점은 이름순으로 순위를 매깁니다.
난이도

쉬움10점 중 3점

유형
정렬, 해시맵, 구현
정답자
아직 제출이 없습니다

문제

세계에는 뛰어난 선수가 많다. 대회마다 우승자가 다르면 누가 가장 잘하는지 말하기 어렵다. 선수의 순위를 매기는 한 가지 방법은 다음과 같다.

  1. 점수를 주는 상위 등수의 개수 PP와 ii등에게 주는 점수 SiS_i를 정한다. 예를 들어 P=3P = 3일 때 1등에게 1000점, 2등에게 500점, 3등에게 300점을 주고 그 아래 등수에는 0점을 주기로 할 수 있다. 한 대회 안에서 공동 등수는 없다.
  2. 대회의 중요도가 모두 같지는 않으므로 ii번째 대회에 가중치 WiW_i를 부여한다. 한 선수가 그 대회에서 얻는 점수는 1번에서 정한 점수에 그 대회의 가중치를 곱한 값이다. 예를 들어 올림픽의 가중치를 5로 정했다면 위 예에서 올림픽 우승자는 5×1000=50005 \times 1000 = 5000점을 얻는다.
  3. 대회에 많이 나갔다는 이유만으로 점수가 높아지지 않도록, 한 선수가 모든 대회에서 얻은 점수 가운데 가장 높은 MM개만 합산한다. 예를 들어 M=2M = 2이고 어떤 선수가 세 대회에서 각각 1000×51000 \times 5, 500×1500 \times 1, 300×3300 \times 3점을 얻었다면 5000과 900만 더해 5900점이 된다.

등수별 점수, 각 대회의 가중치, 대회 결과가 주어진다. 대회에 등장한 모든 선수의 순위를 매겨라.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어지며, 각 테스트 케이스는 다음과 같이 이루어진다.

  1. 첫 줄에 점수를 주는 상위 등수의 개수 PP.
  2. 둘째 줄에 1등부터 차례로 PP개의 점수 S1,S2,…,SPS_1, S_2, \dots, S_P.
  3. 셋째 줄에 대회의 수 NN.
  4. 다음 NN개 줄에 각각 대회 하나의 결과. 각 줄은 그 대회의 가중치 WiW_i로 시작하고, 이어서 상위 PP등에 든 선수의 이름이 1등부터 차례로 주어진다.
  5. 마지막 줄에 한 선수의 점수에 합산되는 대회의 최대 개수 MM.

출력

각 테스트 케이스마다 먼저 Case #x:를 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이다. 그다음 입력에 등장한 모든 선수를 순위가 높은 쪽부터 한 줄에 한 명씩 r: name 형식으로 출력한다. rr은 그 선수의 순위이고 name은 이름이다.

합산 점수가 같은 선수는 같은 순위를 공유한다. 한 선수의 순위는 그 선수보다 합산 점수가 높은 선수의 수에 1을 더한 값이다. 순위가 같은 선수는 이름의 사전순으로 출력한다.

제한

  • 1≤T≤101 \le T \le 10
  • 1≤P≤1001 \le P \le 100
  • 1≤N≤1001 \le N \le 100
  • 1≤M≤1001 \le M \le 100
  • 1≤Si≤10001 \le S_i \le 1000
  • Si>Si+1S_i > S_{i+1}
  • 1≤Wi≤10001 \le W_i \le 1000
  • 이름은 알파벳 대문자 A부터 Z까지로만 이루어지고 길이가 10자 이하이다.
  • 한 대회의 결과에 같은 이름이 두 번 나오지 않는다.

힌트

첫 번째 예제에서 BOLT는 두 대회에서 합계 7000점을 얻었다. GAY는 네 대회의 점수를 모두 더하면 8500점이지만 상위 2개만 세므로 6500점이 되어 2위이다. PEIMENG과 TIANBING은 둘 다 1500점이라 공동 3위이고 이름의 사전순으로 출력된다. LARRY는 1000점뿐이라 마지막이다.

예제5

  1. 예제 1

    입력
    1
    2
    1000 500
    6
    5 BOLT GAY
    4 GAY BOLT
    1 GAY TIANBING
    1 GAY PEIMENG
    1 TIANBING LARRY
    1 PEIMENG LARRY
    2
    
    예상 출력
    Case #1:
    1: BOLT
    2: GAY
    3: PEIMENG
    3: TIANBING
    5: LARRY
    
  2. 예제 2

    입력
    1
    1
    1
    1
    1 A
    1
    
    예상 출력
    Case #1:
    1: A
    
  3. 예제 3

    입력
    1
    3
    1000 500 300
    3
    1 ANNA BORIS CHLOE
    2 BORIS CHLOE ANNA
    3 CHLOE ANNA BORIS
    1
    
    예상 출력
    Case #1:
    1: CHLOE
    2: BORIS
    3: ANNA
    
  4. 예제 4

    입력
    1
    2
    1000 500
    2
    1 X Y
    1 Y X
    100
    
    예상 출력
    Case #1:
    1: X
    1: Y
    
  5. 예제 5

    입력
    3
    1
    7
    2
    2 KIM
    3 LEE
    1
    2
    1000 999
    3
    1000 P Q
    1000 Q P
    1 R P
    2
    1
    1000
    1
    1 SOLO
    1
    
    예상 출력
    Case #1:
    1: LEE
    2: KIM
    Case #2:
    1: P
    1: Q
    3: R
    Case #3:
    1: SOLO