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

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

비밀 메시지

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

요약
M개의 이진 메시지와 N개의 이진 코드워드가 주어질 때, 각 코드워드에 대해 어느 한쪽이 다른 쪽의 접두사가 되는 메시지의 개수를 센다.
난이도

보통10점 중 6점

유형
트라이, 문자열, 누적 합, DFS
정답자
아직 제출이 없습니다

문제

베시가 소들을 이끌고 탈출을 시도하고 있습니다. 서로 정보를 주고받기 위해 소들은 비밀 이진(0과 1) 메시지를 보냅니다.

한 첩자가 MM (1≤M≤5×1041 \le M \le 5 \times 10^4)개의 비밀 이진 메시지 각각에서 앞쪽 bib_i (1≤bi≤1041 \le b_i \le 10^4)개의 비트를 가로챘습니다.

또한 그는 소들이 사용한다고 추정되는 부분 암호 NN (1≤N≤5×1041 \le N \le 5 \times 10^4)개의 목록을 만들었습니다. 암호 jj에 대해서는 앞쪽 cjc_j (1≤cj≤1041 \le c_j \le 10^4)개의 비트만 알고 있습니다.

메시지와 암호는 한쪽이 다른 쪽의 접두사(prefix)일 때 일치한다고 합니다. 즉 첫 번째 비트부터 두 문자열 중 더 짧은 쪽의 길이까지 모든 비트가 같으면 일치입니다. 각 암호 jj에 대해, 가로챈 MM개의 메시지 중 몇 개가 그 암호와 일치하는지 구하세요.

입력에 등장하는 비트의 총 개수(모든 bib_i와 모든 cjc_j의 합)는 5×1055 \times 10^5를 넘지 않습니다.

입력

  • 첫째 줄: 두 정수 MM과 NN.
  • 둘째 줄부터 M+1M+1번째 줄까지: i+1i+1번째 줄은 가로챈 메시지 ii를 나타내며, 정수 bib_i 다음에 bib_i개의 비트(각각 00 또는 11)가 공백으로 구분되어 주어집니다.
  • M+2M+2번째 줄부터 M+N+1M+N+1번째 줄까지: M+j+1M+j+1번째 줄은 암호 jj를 나타내며, 정수 cjc_j 다음에 cjc_j개의 비트(각각 00 또는 11)가 공백으로 구분되어 주어집니다.

출력

  • 11번째 줄부터 NN번째 줄까지: jj번째 줄에는 암호 jj와 일치하는 가로챈 메시지의 개수를 정수 하나로 출력합니다.

힌트

네 개의 메시지 010010, 11, 100100, 110110과 다섯 개의 암호 00, 11, 0101, 0100101001, 1111을 생각해 봅시다.

  • 암호 00은 010010하고만 일치합니다: 11개.
  • 암호 11은 11, 100100, 110110과 일치합니다: 33개.
  • 암호 0101은 010010하고만 일치합니다: 11개.
  • 암호 0100101001은 010010하고만 일치합니다(010010이 0100101001의 접두사): 11개.
  • 암호 1111은 11과 110110하고 일치합니다: 22개.

예제4

  1. 예제 1

    입력
    4 5
    3 0 1 0
    1 1
    3 1 0 0
    3 1 1 0
    1 0
    1 1
    2 0 1
    5 0 1 0 0 1
    2 1 1
    
    예상 출력
    1
    3
    1
    1
    2
    
  2. 예제 2

    입력
    1 1
    1 0
    1 0
    
    예상 출력
    1
    
  3. 예제 3

    입력
    1 1
    3 1 0 1
    1 1
    
    예상 출력
    1
    
  4. 예제 4

    입력
    1 1
    1 0
    1 1
    
    예상 출력
    0