만드는 중입니다

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

Joy

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

요약
실력이 x인 사람이 대기열의 n개 자리 각각에 섰을 때, 토너먼트에서 우승할 확률을 구합니다.
난이도

어려움10점 중 8점

유형
분할 정복, 동적 계획법, 확률
정답자
아직 제출이 없습니다

문제

대기열에 실력이 a1,a2,…,an−1a_1, a_2, \ldots, a_{n-1}인 다른 사람 n−1n-1명이 서 있고, 당신의 실력은 xx이다. 당신은 대기열의 nn개 위치 중 한 곳에 끼어든다. 위치는 1번 사람 앞, 1번과 2번 사이, \ldots, n−1n-1번 사람 뒤까지이다. 각 위치에 대해 당신이 토너먼트에서 우승할 확률을 구하라.

토너먼트는 다음과 같이 진행된다. 대기열에 두 명 이상 남아 있는 동안, 맨 앞의 두 사람을 꺼내 경기를 치른다. 실력이 pp인 사람과 qq인 사람이 경기하면, 앞사람이 pp+q\frac{p}{p+q}의 확률로 이기고 뒷사람이 qp+q\frac{q}{p+q}의 확률로 이긴다. 무승부는 없다.

이긴 사람은 대기열 맨 뒤에 다시 서고, 진 사람은 탈락한다. 마지막까지 남은 사람이 토너먼트의 우승자이다.

입력

첫째 줄에 두 정수 nn과 xx가 주어진다 (2≤n≤40962 \le n \le 4096, n=2kn = 2k를 만족하는 정수 kk, 1≤x≤1041 \le x \le 10^4).

둘째 줄에 정수 a1,a2,…,an−1a_1, a_2, \ldots, a_{n-1}이 주어진다 (1≤ai≤1041 \le a_i \le 10^4). a1a_1은 맨 앞 사람의 실력이고, an−1a_{n-1}은 맨 뒤 사람의 실력이다.

출력

대기열의 nn개 위치에 대해 앞에서부터 차례로, 각 위치에서 당신이 토너먼트에서 우승할 확률을 한 줄에 하나씩 출력하라. 절대 오차 또는 상대 오차가 10−910^{-9} 이하이면 정답으로 인정한다.

힌트

첫 번째 테스트 케이스에서 당신은 어떤 상대든 23\frac{2}{3}의 확률로 이긴다. 우승하려면 두 명을 이겨야 하므로, 시작 위치와 관계없이 답은 49\frac{4}{9}이다.

예제3

  1. 예제 1

    입력
    4 2
    1 1 1
    
    예상 출력
    0.444444444444444
    0.444444444444444
    0.444444444444444
    0.444444444444444
    
  2. 예제 2

    입력
    4 3
    4 5 2
    
    예상 출력
    0.188265306122449
    0.188265306122449
    0.239285714285714
    0.239285714285714
    
  3. 예제 3

    입력
    8 8
    1 2 3 4 5 6 7
    
    예상 출력
    0.393768719371413
    0.393768719371413
    0.353382184051268
    0.353382184051268
    0.248207450668989
    0.248207450668989
    0.230924146560510
    0.230924146560510