랜덤 넘버 추측하기
시간 제한1초메모리 제한1024 MB
회원별 가중치와 M명의 당첨자 순서가 주어질 때, 이를 만들어낼 수 있는 응모권 번호 수열 X를 하나 복원한다.
문제
영과일에서 한 학기동안 문제를 열심히 푼 회원들을 추첨하여 상품을 지급하려고 한다.
각 회원들에겐 문제를 푼 개수만큼 추첨 확률을 높일 수 있는 가중치가 부여된다. 문제를 개 풀었다면 그 회원의 가중치는 이다.
한 학기 동안 문제를 푼 적이 있는 회원은 총 명이고, 그러한 회원들에게 번부터 번까지의 고유 번호를 부여한다.
회원 명중에서 명을 뽑으려고 할 때, 부터 시작하여 다음과 같은 방식으로 추첨을 진행하려고 한다.
- 번 회원부터 번 회원까지 번호 순서대로, 각 회원의 가중치만큼 응모권을 리스트 에 반복해서 넣는다. 예를 들어, 회원이 총 명이고 각각의 가중치가 이라면 이다. (는 번 회원의 응모권)
- 부터 까지의 정수 중 하나를 랜덤하게 선택하고, 이 수를 라 하자.
- 리스트 의 앞에서부터 번째에 해당하는 응모권을 선택해 당첨자 한 명을 뽑는다.
- 리스트 에서 방금 당첨된 회원의 응모권을 모두 제거한다.
- 이면 를 만큼 증가시킨 후 2번 과정으로 돌아가고, 그렇지 않다면 추첨을 종료한다.
위 방식을 통해 뽑힌 당첨자의 고유 번호가 순서대로 주어졌을 때, 랜덤하게 나온 수가 차례대로 무엇일지 추측하려고 한다.
입력
첫 번째 줄에 문제를 푼 회원수 과 당첨인원수 이 공백을 사이에 두고 주어진다.
두 번째 줄에 각 회원의 가중치 가 공백을 사이에 두고 개 주어진다.
세 번째 줄에 뽑힌 순서대로 회원의 번호 가 공백을 사이에 두고 개 주어진다.
입력에서 주어지는 수는 모두 정수이다.
출력
추첨 과정을 통해 랜덤하게 나온 수열 를 공백을 사이에 두고 출력한다.
만약 가능한 수열이 여러 개라면 아무 수열이나 하나 출력한다.