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