아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

타자기 앞의 원숭이들

시간 제한1초메모리 제한128 MB

요약
각 글자와 스페이스의 확률이 주어질 때, 무작위 타자가 첫 스페이스에서 멈출 때 그 앞의 단어가 주어진 단어 중 하나일 확률을 구한다.
난이도

보통10점 중 6점

유형
확률, 트라이, 동적 계획법, 수학
정답자
아직 제출이 없습니다

문제

충분히 많은 원숭이를 타자기 앞에 앉혀 두고 충분히 오랫동안 아무 키나 치게 하면 언젠가는 셰익스피어의 모든 작품을 그대로 쳐낼 것이라는 이야기를 들어 본 적이 있을 것이다. 각 원숭이가 완전히 무작위로 키를 누른다고 가정하는 이야기다.

여기서는 이와 관련된 문제를 푼다. 원숭이는 키를 무작위로 누르다가 처음으로 스페이스바를 누르는 순간 멈춘다. 매 타건은 서로 독립이며, 원숭이는 주어진 확률에 따라 특정 소문자를 누르거나 확률 ss로 스페이스바를 누른다. 이 확률들을 모두 합하면 11이 된다. 처음 스페이스바를 누르기 전까지 친 소문자들의 나열이 원숭이가 만들어 낸 단어이며, 이 나열이 어떤 단어와 정확히 일치할 때 원숭이가 그 단어를 쳤다고 한다.

서로 다른 소문자 단어들의 목록이 주어질 때, 원숭이가 그중 하나를 우연히 쳐낼 확률을 구하라.

입력

첫 번째 줄에는 데이터 집합의 개수 KK가 주어진다. 각 데이터 집합은 다음과 같은 형식을 가진다.

첫 줄에는 세 값 nn, mm, ss가 주어진다 (1≤n≤1001 \le n \le 100, 1≤m≤261 \le m \le 26, 0≤s≤10 \le s \le 1). nn은 목표 단어의 개수, mm은 타자기의 글자 키 개수, ss는 스페이스바를 누를 확률이다.

이어지는 mm개의 줄에는 각각 소문자 하나와 실수 하나가 주어지며, 이는 그 글자를 누를 확률이다. 이 확률들과 ss를 모두 합하면 11이 된다.

그다음 nn개의 줄에는 각각 단어 wiw_i가 하나씩 주어진다. 각 단어는 타자기에 있는 소문자들로만 이루어지며 길이는 11자 이상 2020자 이하이다. 한 데이터 집합 안의 단어들은 모두 서로 다르다.

출력

각 데이터 집합마다 먼저 Data Set x:를 한 줄에 출력한다. 여기서 xx는 데이터 집합의 번호이며 11부터 시작한다. 다음 줄에는 원숭이가 주어진 단어 중 적어도 하나를 칠 확률을 출력한다.

이 확률은 매우 작을 수 있으므로, 가수부 소수점 아래 정확히 네 자리와 부호가 붙은 두 자리 이상의 지수를 가지는 과학적 표기법으로 출력한다. 예를 들면 3.7602E-13 또는 0.0000E+00과 같다.

연속한 두 데이터 집합 사이에는 빈 줄을 하나 넣는다.

예제3

  1. 예제 1

    입력
    2
    2 2 0.5
    a 0.5
    b 0.0
    abba
    baa
    2 2 0.4
    a 0.5
    b 0.1
    abba
    babbbb
    
    예상 출력
    Data Set 1:
    0.0000E+00
    
    Data Set 2:
    1.0020E-03
    
  2. 예제 2

    입력
    1
    1 1 0.5
    a 0.5
    a
    
    예상 출력
    Data Set 1:
    2.5000E-01
    
  3. 예제 3

    입력
    1
    2 2 0.5
    a 0.3
    b 0.2
    a
    b
    
    예상 출력
    Data Set 1:
    2.5000E-01