호프집 선택
시간 제한1초메모리 제한128 MB
n개의 술집에 대해 폴리아 항아리 방식으로 표를 던지는 과정을 시뮬레이션해 각 술집이 최종적으로 선택될 확률을 정확히 계산합니다.
문제
수업이 끝난 학생들이 함께 갈 호프집을 투표로 정한다. 호프집은 개가 있으며, 번호는 번부터 번까지이다.
학생은 두 종류로 나뉜다.
- 주도적인 학생: 각자 확실히 선호하는 호프집이 하나 있고, 언제나 그 호프집에 표를 던진다. 여러 주도적인 학생이 같은 호프집에 표를 던질 수도 있다. 주도적인 학생들의 투표가 모두 끝나면 번 호프집이 받은 표의 수 가 정해진다.
- 주도적이지 않은 학생: 남은 학생들은 주변의 눈치를 보며 확률적으로 투표한다. 이들은 한 명씩 차례대로 투표하는데, 지금 투표하는 학생이 번 호프집을 고를 확률은 (그 순간까지 번 호프집이 받은 표의 수) / (그 순간까지 던져진 전체 표의 수) 이다.
모든 학생이 투표를 마치면 가장 많은 표를 받은 호프집이 선택된다. 만약 최다 득표 호프집이 여러 개이면, 그 호프집들 중 하나가 균등한 확률로 무작위로 선택된다.
예를 들어 학생이 일곱 명, 호프집이 세 개이고 그중 다섯 명이 주도적인 학생이라고 하자. 주도적인 학생들의 투표 결과 각 호프집의 득표가 이라면, 아직 주도적이지 않은 학생 두 명이 투표해야 한다.
첫 번째 학생이 번을 고를 확률은 , 번과 번을 고를 확률은 각각 이다. 이 학생이 번을 골랐다면 득표는 가 된다. 두 번째 학생이 번을 고를 확률은 , 번은 , 번은 이다. 이 학생도 번을 골랐다면 득표는 이 되고, 번과 번의 표가 같으므로 두 호프집이 각각 의 확률로 선택된다.
호프집의 수, 학생의 수, 그리고 주도적인 학생들의 투표가 끝난 뒤 각 호프집이 받은 표가 주어질 때, 각 호프집이 최종적으로 선택될 확률을 구하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 입력의 끝까지 각 테스트 케이스를 처리해야 한다.
각 테스트 케이스의 첫째 줄에는 호프집의 수 ()과 학생의 수 ()가 주어진다. 둘째 줄에는 주도적인 학생들의 투표가 끝난 뒤 각 호프집이 받은 표 이 주어진다. 각 는 이상이며, 항상 를 만족한다. 또한 적어도 한 표는 던져져 있어 이다. 학생 명 중 주도적이지 않은 학생의 수는 이다.
출력
각 테스트 케이스에 대해, 호프집 번부터 번까지 순서대로 그 호프집이 선택될 확률을 한 줄에 하나씩 출력한다. 각 줄은 pub i: p % 형식이며, 는 호프집 번호, 는 선택될 확률을 백분율로 나타낸 값이다.
는 (확률 )을 소수점 셋째 자리에서 반올림하여 소수점 둘째 자리까지 나타낸다. 반올림은 반올림 대상 숫자가 정확히 일 때 올리는 방식(round half up)을 사용하며, 소수점 아래 두 자리를 항상 표시한다(예: 100.00, 0.00). 여러 테스트 케이스의 출력은 빈 줄 없이 이어서 출력한다.