가위바위보 토너먼트

면접 대비

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

요약
모든 경기의 승패를 선수별로 세어 w/(w+l)을 소수 셋째 자리까지 반올림해 출력하고, 분모가 0이면 -를 출력한다.
난이도

보통10점 중 4점

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

문제

가위바위보는 두 명의 플레이어 A와 B가 서로 독립적으로 바위(rock), 보(paper), 가위(scissors) 중 하나를 내는 게임입니다. 보는 바위를 이기고, 가위는 보를 이기며, 바위는 가위를 이깁니다. 두 플레이어가 같은 것을 내면 승부가 나지 않습니다(무승부).

nn명의 플레이어가 참가하는 토너먼트가 열립니다. 각 플레이어는 자신을 제외한 다른 모든 플레이어와 각각 kk번씩 가위바위보를 하므로, 전체 경기 수는 k⋅n⋅(n−1)2\dfrac{k \cdot n \cdot (n-1)}{2}번입니다.

각 플레이어의 승률(win average)을 구하세요. 승률은 ww+l\dfrac{w}{w+l}로 정의하며, ww는 그 플레이어가 이긴 경기 수, ll은 진 경기 수입니다(무승부는 세지 않습니다).

승률은 소수점 셋째 자리까지 반올림하여 출력합니다(정확히 x.xxx5x.xxx5 형태가 되는 경계값은 올림). w+l=0w + l = 0이어서 승률이 정의되지 않으면 -를 출력합니다.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 두 정수 nn과 kk (1≤n≤1001 \le n \le 100, 1≤k≤1001 \le k \le 100)가 주어집니다. 이어서 각 경기마다 한 줄씩 p1 m1 p2 m2 형식으로 주어집니다. p1p_1과 p2p_2 (1≤p1,p2≤n1 \le p_1, p_2 \le n, p1≠p2p_1 \ne p_2)는 두 플레이어의 번호이고, m1m_1과 m2m_2는 각 플레이어가 낸 것으로 rock, scissors, paper 중 하나입니다. 각 테스트 케이스에는 정확히 k⋅n⋅(n−1)2\dfrac{k \cdot n \cdot (n-1)}{2}개의 경기 줄이 있습니다. 마지막 테스트 케이스 다음에는 0 하나만 있는 줄이 옵니다.

출력

각 테스트 케이스마다 플레이어 1번부터 nn번까지 순서대로 한 줄에 한 명씩 승률을 소수점 셋째 자리까지 출력합니다. 승률이 정의되지 않으면 -를 출력합니다. 서로 다른 테스트 케이스의 출력 사이에는 빈 줄 하나를 넣습니다.

예제1

  1. 예제 1

    입력
    2 4
    1 rock 2 paper
    1 scissors 2 paper
    1 rock 2 rock
    2 rock 1 scissors
    2 1
    1 rock 2 paper
    0
    
    예상 출력
    0.333
    0.667
    
    0.000
    1.000