타자기 앞의 원숭이들
시간 제한1초메모리 제한128 MB
각 글자와 스페이스의 확률이 주어질 때, 무작위 타자가 첫 스페이스에서 멈출 때 그 앞의 단어가 주어진 단어 중 하나일 확률을 구한다.
문제
충분히 많은 원숭이를 타자기 앞에 앉혀 두고 충분히 오랫동안 아무 키나 치게 하면 언젠가는 셰익스피어의 모든 작품을 그대로 쳐낼 것이라는 이야기를 들어 본 적이 있을 것이다. 각 원숭이가 완전히 무작위로 키를 누른다고 가정하는 이야기다.
여기서는 이와 관련된 문제를 푼다. 원숭이는 키를 무작위로 누르다가 처음으로 스페이스바를 누르는 순간 멈춘다. 매 타건은 서로 독립이며, 원숭이는 주어진 확률에 따라 특정 소문자를 누르거나 확률 로 스페이스바를 누른다. 이 확률들을 모두 합하면 이 된다. 처음 스페이스바를 누르기 전까지 친 소문자들의 나열이 원숭이가 만들어 낸 단어이며, 이 나열이 어떤 단어와 정확히 일치할 때 원숭이가 그 단어를 쳤다고 한다.
서로 다른 소문자 단어들의 목록이 주어질 때, 원숭이가 그중 하나를 우연히 쳐낼 확률을 구하라.
입력
첫 번째 줄에는 데이터 집합의 개수 가 주어진다. 각 데이터 집합은 다음과 같은 형식을 가진다.
첫 줄에는 세 값 , , 가 주어진다 (, , ). 은 목표 단어의 개수, 은 타자기의 글자 키 개수, 는 스페이스바를 누를 확률이다.
이어지는 개의 줄에는 각각 소문자 하나와 실수 하나가 주어지며, 이는 그 글자를 누를 확률이다. 이 확률들과 를 모두 합하면 이 된다.
그다음 개의 줄에는 각각 단어 가 하나씩 주어진다. 각 단어는 타자기에 있는 소문자들로만 이루어지며 길이는 자 이상 자 이하이다. 한 데이터 집합 안의 단어들은 모두 서로 다르다.
출력
각 데이터 집합마다 먼저 Data Set x:를 한 줄에 출력한다. 여기서 는 데이터 집합의 번호이며 부터 시작한다. 다음 줄에는 원숭이가 주어진 단어 중 적어도 하나를 칠 확률을 출력한다.
이 확률은 매우 작을 수 있으므로, 가수부 소수점 아래 정확히 네 자리와 부호가 붙은 두 자리 이상의 지수를 가지는 과학적 표기법으로 출력한다. 예를 들면 3.7602E-13 또는 0.0000E+00과 같다.
연속한 두 데이터 집합 사이에는 빈 줄을 하나 넣는다.