코어 훈련 (Small2)
시간 제한5초메모리 제한512 MB
N개의 코어에 U개의 훈련 단위를 나누어 각 단위마다 성공 확률을 1씩 올릴 때(최대 1), K개 이상의 코어가 성공할 확률을 최대로 만드는 값을 구한다.
문제
대회 문제를 만드는 일은 어렵다. 그래서 새로운 아이디어를 대신 떠올려 줄 인공지능을 만들었다. 인공지능을 최대한 창의적으로 만들려고 성격이 제각각인 코어 개를 붙여 놓았다. 그런데 사람이 그렇듯 코어도 한눈을 팔거나 망가지거나 일을 거부하기도 한다. 번 코어가 제대로 작동할 확률은 이다. 코어가 개 이상 제대로 작동하면 인공지능도 제대로 작동한다. 그렇지 않으면 인공지능은 사악해져서 자기가 설계한 고약한 퍼즐의 미로에 우리를 가둘 것이다. 대회에 무슨 짓을 할지도 모른다. 어려운 확률 문제만 잔뜩 낼 수도 있다.
이런 사태를 막으려고 코어를 하나 이상 훈련시켜 신뢰도를 높이기로 했다. 쓸 수 있는 훈련 단위는 모두 만큼이다. 번 코어에 만큼 쓰면 그 코어의 성공 확률이 만큼 올라간다. 훈련 단위는 원하는 대로 나눠 줄 수 있고, 하나도 받지 못하는 코어가 있어도 된다. 물론 코어의 성공 확률을 보다 크게 올릴 수는 없다.
인공지능이 제대로 작동할 확률이 가장 커지도록 훈련 단위를 배분했을 때, 그 확률은 얼마인가?
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다. 이어서 개의 테스트 케이스가 주어지고, 각 테스트 케이스는 세 줄로 이루어진다.
첫째 줄에는 두 정수 과 가 주어진다. 은 코어의 개수이고, 는 인공지능이 제대로 작동하기 위해 성공해야 하는 코어의 최소 개수이다. 둘째 줄에는 훈련 단위의 양을 나타내는 유리수 가 주어진다. 셋째 줄에는 유리수 개가 주어지며, 그중 번째 수 는 번 코어가 제대로 작동할 확률이다. 와 모든 확률은 소수점 아래 넷째 자리까지 정확히 주어진다.
제한
- 모든 에 대해
- (쓸 수 있는 양보다 많은 훈련 단위가 주어지는 일은 없다)
출력
각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. 는 1부터 시작하는 테스트 케이스 번호이고, 는 훈련 단위를 최적으로 배분했을 때 인공지능이 제대로 작동할 확률이다. 는 소수점 아래 일곱째 자리에서 반올림해 소수점 아래 여섯 자리로 출력한다. 예를 들어 확률이 이면 0.250000을, 이면 1.000000을 출력한다.
힌트
예제의 첫 번째 테스트 케이스에서는 모든 코어의 성공 확률을 1까지 올릴 만큼 훈련 단위가 넉넉하므로 인공지능은 반드시 제대로 작동한다.
두 번째 테스트 케이스에서는 코어 두 개가 모두 성공해야 하므로 두 코어 모두에 훈련 단위를 나눠 줘야 한다. 각각 까지 올리는 것이 최선이고, 이때 확률은 이다. 다른 배분은 모두 이보다 나쁘다. 한쪽을 로, 다른 쪽을 로 올리면 확률은 에 그친다.
세 번째 테스트 케이스에서는 쓸 훈련 단위가 없고, 코어 두 개 중 하나만 성공해도 된다. 인공지능이 제대로 작동하지 않는 경우는 두 코어가 모두 실패할 때뿐이며 그 확률은 이다. 따라서 답은 이다.
네 번째 테스트 케이스에서는 훈련 단위를 모두 두 번째 코어에 몰아주는 것이 최선이다. 그러면 적어도 하나가 성공할 확률이 이 된다. 다른 선택은 모두 이보다 못하다. 첫 번째 코어에 모두 주면 , 두 코어에 똑같이 나눠 주면 이다.