만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

몰로코 빗코인 복권 (쉬운 버전)

면접 대비

시간 제한2초메모리 제한512 MB

요약
상금 w_i와 계속 확률 p_i를 가진 n개의 티켓을 골라, 받는 상금 합의 기댓값이 최대가 되도록 순서를 정하고 그중 사전순으로 가장 앞선 순열을 출력한다.
난이도

보통10점 중 6점

유형
그리디, 정렬, 수학, 확률
정답자
아직 제출이 없습니다

문제

몰로코는 매달 말에 직원 복지를 걸고 간단한 복권 추첨을 한다.

당신은 복권 nn장을 받았고, ii번 복권의 상금은 빗코인 wiw_i개다 (wi>0w_i > 0).

복권마다 동전이 하나씩 짝지어져 있다. ii번 복권의 동전은 확률 pip_i로 앞면이, 확률 1−pi1 - p_i로 뒷면이 나온다 (0<pi<10 < p_i < 1). 동전 던지기는 모두 독립이다.

각 단계에서 아직 고르지 않은 복권 하나를 골라 상금을 즉시 받는다. 그다음 그 복권에 짝지어진 동전을 던진다. 앞면이 나오면 추첨이 이어져 복권을 하나 더 고르고, 복권이 다 떨어질 때까지 같은 과정을 반복한다. 뒷면이 나오면 추첨은 그 자리에서 끝나고 그때까지 모은 빗코인을 전부 가진다.

모든 wiw_i와 pip_i를 알고 있다. 받는 빗코인의 기댓값을 최대로 만드는 복권 선택 순서를 구하라.

입력

첫째 줄에 정수 nn이 주어진다 (1≤n≤10001 \le n \le 1000).

다음 nn개 줄에 두 정수 wiw_i와 qiq_i가 주어진다 (1≤wi≤100001 \le w_i \le 10000, 0<qi<100000 < q_i < 10000). 확률은 pi=qi/10000p_i = q_i / 10000으로 정의한다.

출력

복권을 고르는 순서를 나타내는 순열을 한 줄에 출력한다. 순열은 11부터 nn까지의 정수로 이루어진 길이 nn의 수열이며, 수는 공백으로 구분한다.

기댓값을 최대로 만드는 순열이 여럿이면 사전순으로 가장 앞서는 것을 출력한다. 즉 앞쪽 자리일수록 작은 번호가 오도록 한다.

노트

순서 π\pi로 복권을 고를 때 받는 빗코인의 기댓값은 다음과 같다.

∑k=1nwπk∏j<kpπj\sum_{k=1}^{n} w_{\pi_k} \prod_{j < k} p_{\pi_j}

첫 번째 예제에서 순서 (1,2,3)(1, 2, 3)의 기댓값은 2+0.3×5+0.15×7=4.552 + 0.3 \times 5 + 0.15 \times 7 = 4.55다. 기댓값을 최대로 만드는 순서는 (2,3,1)(2, 3, 1)이고 그 값은 8.78.7이다.

세 번째 예제에서는 순서 (2,3,1)(2, 3, 1)과 (3,2,1)(3, 2, 1)의 기댓값이 같지만 (2,3,1)(2, 3, 1)이 사전순으로 앞선다.

예제5

  1. 예제 1

    입력
    3
    2 3000
    5 5000
    7 2000
    
    예상 출력
    2 3 1
    
  2. 예제 2

    입력
    3
    3 5000
    5 1500
    7 2000
    
    예상 출력
    3 1 2
    
  3. 예제 3

    입력
    3
    1 4000
    1 5000
    1 5000
    
    예상 출력
    2 3 1
    
  4. 예제 4

    입력
    1
    10000 9999
    
    예상 출력
    1
    
  5. 예제 5

    입력
    5
    7 3000
    7 3000
    7 3000
    7 3000
    7 3000
    
    예상 출력
    1 2 3 4 5