[2021 SCPC 2차 예선]

패턴 매칭

영어 소문자로 된 두 문자열 A와 B가 매치가 된다는 것은 다음과 같이 정의된다. 

    1. A와 B의 길이가 같다.

    2. A의 i번째와 j번째 글자가 같으면 B의 i번째와 j번째 글자도 같다. 

    3. A의 i번째와 j번째 글자가 다르면 B의 i번째와 j번째 글자도 다르다.

즉 문자열 abcd와 문자열 pqrs는 매치가 된다. 하지만, 문자열 abac와 문자열 pqrs는 매치가 되지 않는다. 



텍스트 T에 패턴 P가 등장한다는 것은 T에서 길이가 P와 같은 연속된 일부분이 위의 기준에 따라 P와 매치가 된다는 것으로 정의된다. T에서 P의 매치 횟수는 T에서 P가 등장하는 서로 다른 위치의 개수를 말한다.



텍스트 하나와 K개의 패턴을 입력으로 받아 각 패턴이 텍스트에 등장하는 횟수를 계산하는 프로그램을 작성하라.


입력

입력 파일에는 여러 테스트 케이스가 포함될 수 있다.

파일의 첫째 줄에 테스트 케이스의 개수를 나타내는 자연수 T 가 주어지고,

이후 차례로  T 개의 테스트 케이스가 주어진다. (1 ≤ T ≤ 24) 

각 테스트 케이스의 첫 줄에는 텍스트의 길이 N과 패턴의 개수 K가 주어진다. (1≤N≤2,000,000).

패턴의 최대 길이는 N과 500 중 작은 값이다. 한 케이스에서 패턴 길이의 총 합은 30,000을 넘지 않는다.

다음 줄에 텍스트가 영어 소문자의 문자열로 주어진다.

다음 K 줄에 각각 하나의 패턴이 영어 소문자의 문자열로 주어진다. 


출력

각 테스트 케이스의 답을 순서대로 표준출력으로 출력하여야 하며,

각 테스트 케이스마다 첫 줄에는 “Case #C”를 출력하여야 한다. 이때 C는 테스트 케이스의 번호이다.

그 다음 줄에, (첫번째 패턴의 매치 횟수)×1, (두번째 패턴의 매치 횟수) ×2, …, (K번째 패턴의 매치 횟수) ×K를 모두 더한 값을 출력한다.

입출력예

입력
3
9 1
dabacadab
nxyxz
20 2
abracadabracadabraaa
abracadabra
aa
18 2
abracadabracadabra
abracadabra
a
출력
Case #1
3
Case #2
6
Case #3
38

돌아가기


댓글