죽으면 첫 레벨부터 다시 시작할 때 전체 클리어까지 걸리는 기대 시간이 최소가 되는 레벨 순서를 구합니다.
보통7그리디정렬확률아직 제출이 없습니다시간 제한5초메모리 제한512 MB비디오 게임에서 모든 레벨을 한 번도 죽지 않고 연달아 깨면 업적을 얻는다. 레벨은 원하는 순서로 배치할 수 있고, 한 레벨을 시도하면 그 레벨을 깨거나 죽는다. 레벨마다 죽을 확률과 한 번 시도하는 데 걸리는 시간이 정해져 있다.
레벨을 깨는 데 걸리는 시간과 죽는 데 걸리는 시간은 같다. 죽으면 곧바로 자신이 정한 순서의 첫 레벨부터 다시 시작한다.
업적을 얻을 때까지 걸리는 시간의 기댓값이 가장 작아지는 레벨 순서를 구하라.
첫 줄에 테스트 케이스의 수 T가 주어진다. 이어서 각 테스트 케이스가 세 줄씩 주어진다.
각 테스트 케이스의 첫 줄에는 레벨의 수 N이 주어진다. 둘째 줄에는 N개의 정수 Li가 공백으로 구분되어 주어진다. Li는 레벨 i를 한 번 시도하는 데 걸리는 시간(초)이며, 깨든 죽든 같다. 셋째 줄에는 N개의 정수 Pi가 공백으로 구분되어 주어진다. Pi는 레벨 i를 한 번 시도할 때 죽을 확률을 백분율로 나타낸 값이다.
레벨 번호는 0부터 N−1까지다.
각 테스트 케이스마다 한 줄에 Case #x: 를 출력하고, 이어서 N개의 정수를 공백으로 구분해 출력한다. x는 1부터 시작하는 테스트 케이스 번호다.
j번째 정수는 j번째로 시도할 레벨의 번호여야 한다. 즉 출력하는 수열은 0부터 N−1까지의 순열이고, 그 순서로 레벨을 시도했을 때 업적을 얻기까지 걸리는 시간의 기댓값이 최소여야 한다.
기댓값이 최소인 순서가 여러 개면 그중 사전순으로 가장 앞서는 것을 출력한다. 두 순서 중에서는 처음으로 달라지는 자리의 수가 더 작은 쪽이 사전순으로 앞선다.