진화

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

요약
알 수 없는 부모-자식 순서로 이어진 N개의 DNA 문자열이 주어질 때, 각 개체가 실험의 원래 개체일 확률을 구한다.
난이도

보통10점 중 7점

유형
확률, 비트 연산, 동적 계획법
정답자
아직 제출이 없습니다

문제

Beverly 박사는 특이한 생물을 연구하고 있다. 이 생물의 DNA는 크기가 dd인 알파벳에서 고른 kk개의 문자로 이루어진 하나의 문자열이다. 개체는 태어난 지 한 시간 뒤에 정확히 하나의 자손을 낳고, 그 뒤로도 잠시 더 살아간다. 이 과정이 세대마다 반복되어 하나의 직계 혈통을 이룬다.

자손이 태어날 때 그 DNA는 부모의 DNA를 복제한 것이지만, kk개의 문자는 각각 독립적으로 돌연변이를 일으킬 수 있다. 각 문자는 확률 pp로 돌연변이하여 크기가 dd인 알파벳에서 균등한 확률로 고른 문자로 바뀐다(우연히 같은 문자가 될 수도 있다). 확률 1−p1 - p로는 문자가 그대로 유지된다. 따라서 부모에서 자식으로 한 세대가 지날 때, 어떤 한 문자가 특정한 목표 문자와 같게 유지될 확률은 (1−p)+p/d(1 - p) + p/d이고, 특정한 다른 문자로 바뀔 확률은 p/dp/d이다. 문자열 전체의 전이 확률은 kk개 위치에 대한 곱이다.

Beverly 박사는 개체 하나로 실험을 시작했지만, 곧 딴 데 정신이 팔려 실험을 잊어버렸다. 한참 뒤 돌아와 보니 NN마리의 사체가 남아 있었는데, 이는 최초 개체와 그 자손들이 이어진 혈통 전체였다. 하지만 박사는 이들의 출생 순서를 더 이상 알지 못한다. 박사는 NN개의 DNA를 모두 채취했다. 채취한 각 개체에 대해, 그 개체가 실험을 시작한 최초 개체였을 확률을 구하여라.

사전적으로 NN마리 각각이 최초 개체였을 확률은 모두 같다고 가정하며, NN개의 문자열은 무작위 순서로 주어진다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스의 형식은 다음과 같다.

  • 한 줄에 세 정수 NN, kk, dd와 실수 pp가 공백 하나로 구분되어 주어진다. 이때 1≤N≤151 \le N \le 15, 1≤k≤81 \le k \le 8, 1≤d≤41 \le d \le 4, 0.2≤p≤0.50.2 \le p \le 0.5이다.
  • 이어지는 NN개의 줄에는 각각 크기가 dd인 고정된 알파벳(모든 문자열에 대해 동일하며 대문자 A–Z의 부분집합) 위에서 정의된 길이 kk의 문자열이 주어진다. ii번째 줄의 문자열은 ii번째 개체의 DNA이다.

출력

각 테스트 케이스마다 NN개의 줄을 출력한다. ii번째 줄에는 입력에서 ii번째로 주어진 개체가 최초 개체였을 확률을 소수점 아래 여섯 자리까지 반올림하여 출력한다.

예제4

  1. 예제 1

    입력
    2
    3 1 2 0.25
    A
    C
    C
    4 4 4 0.50
    GTTG
    TGTG
    TTTG
    GTGT
    
    예상 출력
    0.466667
    0.266667
    0.266667
    0.046602
    0.393710
    0.083333
    0.476354
    
  2. 예제 2

    입력
    1
    1 3 2 0.30
    AAA
    
    예상 출력
    1.000000
    
  3. 예제 3

    입력
    1
    2 2 2 0.40
    AB
    AB
    
    예상 출력
    0.500000
    0.500000
    
  4. 예제 4

    입력
    1
    3 1 3 0.30
    A
    B
    C
    
    예상 출력
    0.333333
    0.333333
    0.333333