만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

루시드 스트링

시간 제한0.5초메모리 제한512 MB

요약
길이 n인 문자열 S에서 같은 길이의 k개 조각으로 나눌 때 조각들이 모두 서로 다른 부분 문자열의 개수를 구합니다.
난이도

보통10점 중 6점

유형
문자열 매칭, 해시맵, 문자열
정답자
아직 제출이 없습니다

문제

영어 소문자 26개로 이루어진 문자열을 생각하자. 문자열의 길이가 두 양의 정수 kk (≥ 2)와 cc의 곱으로 표현되면, 그 문자열을 길이가 cc로 같은 부분 문자열 kk개로 나눌 수 있다. 나눈 kk개의 부분 문자열이 모두 서로 다르면, 그 문자열을 "kk-Lucid-String" (줄여서 "kk-LS")이라고 한다. 부분 문자열은 문자열 안에서 연속된 문자들의 묶음이다.

예를 들어 길이가 6인 ababca는 k=2,3,6k = 2, 3, 6의 세 경우를 확인해야 한다. k=2k = 2일 때 aba와 bca로 나뉘고 서로 다르므로 2-LS이다. k=3k = 3일 때는 길이 2인 부분 문자열 3개로 나뉘지만 ab가 두 번 나오므로 3-LS가 아니다. k=6k = 6일 때는 길이 1인 부분 문자열 6개로 나뉘지만 a와 b가 각각 두 번 나오므로 6-LS가 아니다.

길이가 nn인 문자열 SS와 정수 kk가 주어졌을 때, SS의 부분 문자열 중 kk-LS인 것의 개수를 구하라. 내용이 같더라도 SS에서 시작 위치가 다르면 각각 따로 센다.

예를 들어 k=2k = 2일 때 ababca의 부분 문자열 ab, ba, ab, bc, ca는 모두 서로 다른 길이 1의 부분 문자열 2개로 나뉘므로 2-LS이다. 부분 문자열 babc와 abca도 길이 2인 서로 다른 부분 문자열 2개로 나뉘므로 2-LS이다. 문자열 전체도 2-LS이므로, ababca에는 2-LS인 부분 문자열이 8개 있다.

입력

첫 줄에 두 정수 nn (3 ≤ nn ≤ 40,000)과 kk (2 ≤ kk ≤ 40,000)가 주어진다. nn은 문자열의 길이이고, kk는 각 kk-LS를 이루는 같은 길이 부분 문자열의 개수이다. kk ≤ nn이라고 가정해도 된다. 둘째 줄에는 길이가 nn인 문자열이 주어진다.

출력

입력된 문자열의 부분 문자열 중 kk-LS인 것의 개수를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    6 2
    ababca
    
    예상 출력
    8
    
  2. 예제 2

    입력
    6 3
    ababca
    
    예상 출력
    2