K = N이므로 모든 코어가 성공해야 AI가 작동한다. U개의 훈련량을 코어에 나눠 최종 성공 확률의 곱을 최대로 만든다.
보통5그리디수학확률구현면접 대비아직 제출이 없습니다시간 제한5초메모리 제한512 MBAI 하나가 성격이 제각각인 코어 N개로 돌아간다. 코어도 사람처럼 딴짓을 하거나 망가지거나 아예 일을 거부한다. i번 코어가 제대로 작동할 확률은 Pi다. 코어가 K개 이상 제대로 작동하면 AI도 제대로 작동하고, 그렇지 않으면 AI는 엉뚱한 짓을 시작한다.
그래서 코어 몇 개를 훈련시켜 더 믿을 만하게 만들려고 한다. 쓸 수 있는 훈련 단위는 모두 합쳐 U다. i번 코어에 X만큼 쓰면 그 코어의 성공 확률이 X만큼 올라간다. 단위는 실수 값으로 원하는 대로 쪼개 나눠 줄 수 있고, 한 단위도 받지 못하는 코어가 있어도 된다. 물론 성공 확률은 1을 넘길 수 없다.
훈련 단위를 최적으로 배분했을 때 AI가 제대로 작동할 확률을 구하라.
이 문제에서는 항상 K=N이다. 즉 코어가 하나라도 실패하면 AI는 제대로 작동하지 않는다.
첫 줄에 테스트 케이스 수 T가 주어진다. 이어서 테스트 케이스가 T개 주어지고, 각 케이스는 세 줄이다. 첫 줄에는 정수 N과 K가 주어진다. N은 코어 수, K는 AI가 제대로 작동하는 데 필요한 최소 성공 코어 수다. 둘째 줄에는 훈련 단위의 총량 U가 주어진다. 셋째 줄에는 수 N개가 주어지고, 그중 i번째 값이 i번 코어의 성공 확률 Pi다. U와 Pi는 모두 소수점 아래 넷째 자리까지 적혀 있다.
제한
각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, y는 훈련 단위를 최적으로 배분했을 때 AI가 제대로 작동할 확률이다.
y는 소수점 아래 일곱째 자리에서 반올림해 소수점 아래 여섯 자리로 출력한다. 버리는 부분이 정확히 절반이면 올린다. 끝자리가 0이어도 여섯 자리를 모두 적는다. 확률이 1이면 1.000000, 1/4이면 0.250000으로 출력한다.
첫 번째 예제의 첫 케이스에서는 훈련 단위가 넉넉해서 코어 네 개를 모두 확률 1까지 올릴 수 있다. 그래서 답은 1이다.
첫 번째 예제의 둘째 케이스에서는 코어 두 개가 모두 성공해야 하므로 양쪽에 단위를 나눠 준다. 각각 0.5로 올리는 것이 최선이고 확률은 0.5×0.5=0.25다. 한쪽을 0.9, 다른 쪽을 0.1로 만들면 0.09에 그친다.
두 번째 예제의 셋째 케이스에서는 단위 0.2를 전부 낮은 쪽 코어에 주어 0.1을 0.3으로 올린다. 답은 0.3×0.9=0.27이다. 단위를 전부 높은 쪽 코어에 주면 확률이 1을 넘을 수 없어 0.1×1.0=0.1이 되고, 절반씩 나누면 0.2×1.0=0.2가 된다.