각 학생의 고정된 학기 점수와 시험 점수 확률분포가 주어질 때, 성적 문자열이 금지된 부분 문자열을 하나도 포함하지 않을 확률을 구한다.
어려움8동적 계획법문자열 매칭확률트라이아직 제출이 없습니다시간 제한1.5초메모리 제한512 MB어떤 대학은 학생에게 0점부터 100점까지 주는 평가 방식을 쓴다. 학기 중에 0점부터 75점까지, 기말시험에서 0점부터 25점까지를 받는다. 최종 학점은 학기 점수와 시험 점수의 합으로 정해진다.
| 점수 합 | 학점 |
|---|---|
| 90-100 | A |
| 82-89 | B |
| 75-81 | C |
| 68-74 | D |
| 60-67 | E |
| 35-59 | FX |
학기 중에 35점 미만을 받은 학생은 시험을 볼 수 없다. 이 문제에서는 그런 학생의 이름이 명단에서 이미 지워졌다고 본다.
성적표의 학점 칸을 위에서 아래로 읽으면 여러 가지 "단어"가 만들어진다. 예를 들어 연속한 학생 세 명의 점수 합이 92, 75, 66이면 학점은 차례로 A, C, E이고 단어 ACE가 나온다. 학점이 FX인 학생은 글자 두 개를 만든다. 먼저 F가 들어가고 그다음 X가 들어간다.
시험 결과를 미리 알 수는 없다. 그러나 교수는 학생마다 실력이 어느 정도인지와 시험이 얼마나 어려운지를 알고 있어서, 학생이 시험에서 받을 점수마다 그 확률을 백분율로 어림잡는다. 즉 0점, 1점, 2점, ..., 25점을 받을 확률을 음이 아닌 정수 26개로 제시하며 그 합은 100이다. 학기 중에 각 학생이 받은 점수는 확률 없이 35 이상 75 이하의 확정된 수로 주어진다.
교수는 심미안이 까다로워서, 학점이 만드는 단어 안에 자기 취향에 맞지 않는 "불쾌한" 문자열이 부분 문자열로 들어가는 상황을 싫어한다.
불쾌한 문자열이 하나도 나타나지 않을 확률을 구하는 프로그램을 작성하라.
첫째 줄에 학생 수 N이 주어진다. (3≤N≤4096)
다음 N개의 줄에는 각각 공백으로 구분된 정수 27개가 주어진다. 첫 번째 수는 그 학생의 학기 점수이고 35 이상 75 이하이다. 이어지는 26개의 수는 시험에서 0, 1, 2, ..., 25점을 받을 확률을 백분율로 나타낸 값이다. 각 확률은 음이 아닌 정수이고 26개의 합은 100이다.
그다음 줄에 교수가 싫어하는 단어의 개수 K가 주어진다. (1≤K≤1024)
이어지는 K개의 줄에는 불쾌한 단어가 한 줄에 하나씩 주어진다. 각 단어는 영어 대문자로만 이루어지고 길이는 2 이상 1024 이하이며, K개 단어의 길이 합은 32768을 넘지 않는다. 같은 단어가 두 번 이상 주어질 수 있다.
교수가 만족할 확률을 백분율로 한 줄에 출력한다. 소수점 아래 여섯째 자리까지 반올림하고, 여섯 자리를 항상 모두 적는다. 예를 들어 확률이 79.5퍼센트면 79.500000을 출력한다. 소수점은 마침표로 쓴다.
첫 번째 예제에서 학점에는 W가 나올 수 없으므로 단어 WAW는 무시하고 DE만 찾으면 된다. 첫 번째 학생의 점수 합은 적어도 72+10=82이므로 이 학생의 학점은 D가 될 수 없다. 따라서 DE는 두 번째 학생이 13점에서 19점 사이를 받고 세 번째 학생이 5점에서 12점 사이를 받을 때만 나타난다. 두 확률은 각각 8+8+7+6+5+4+3=41퍼센트와 3+4+5+6+7+8+8+9=50퍼센트다. 그러므로 DE가 나타날 확률은 0.41×0.5=0.205이고, 나타나지 않을 확률은 1−0.205=0.795, 즉 79.5퍼센트다.