비밀 메시지
시간 제한1초메모리 제한128 MB
M개의 이진 메시지와 N개의 이진 코드워드가 주어질 때, 각 코드워드에 대해 어느 한쪽이 다른 쪽의 접두사가 되는 메시지의 개수를 센다.
문제
베시가 소들을 이끌고 탈출을 시도하고 있습니다. 서로 정보를 주고받기 위해 소들은 비밀 이진(0과 1) 메시지를 보냅니다.
한 첩자가 ()개의 비밀 이진 메시지 각각에서 앞쪽 ()개의 비트를 가로챘습니다.
또한 그는 소들이 사용한다고 추정되는 부분 암호 ()개의 목록을 만들었습니다. 암호 에 대해서는 앞쪽 ()개의 비트만 알고 있습니다.
메시지와 암호는 한쪽이 다른 쪽의 접두사(prefix)일 때 일치한다고 합니다. 즉 첫 번째 비트부터 두 문자열 중 더 짧은 쪽의 길이까지 모든 비트가 같으면 일치입니다. 각 암호 에 대해, 가로챈 개의 메시지 중 몇 개가 그 암호와 일치하는지 구하세요.
입력에 등장하는 비트의 총 개수(모든 와 모든 의 합)는 를 넘지 않습니다.
입력
- 첫째 줄: 두 정수 과 .
- 둘째 줄부터 번째 줄까지: 번째 줄은 가로챈 메시지 를 나타내며, 정수 다음에 개의 비트(각각 또는 )가 공백으로 구분되어 주어집니다.
- 번째 줄부터 번째 줄까지: 번째 줄은 암호 를 나타내며, 정수 다음에 개의 비트(각각 또는 )가 공백으로 구분되어 주어집니다.
출력
- 번째 줄부터 번째 줄까지: 번째 줄에는 암호 와 일치하는 가로챈 메시지의 개수를 정수 하나로 출력합니다.
힌트
네 개의 메시지 , , , 과 다섯 개의 암호 , , , , 을 생각해 봅시다.
- 암호 은 하고만 일치합니다: 개.
- 암호 은 , , 과 일치합니다: 개.
- 암호 은 하고만 일치합니다: 개.
- 암호 은 하고만 일치합니다(이 의 접두사): 개.
- 암호 은 과 하고 일치합니다: 개.