만드는 중입니다

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

제곱 부분 문자열

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

요약
소문자 문자열과 구간 질의가 주어질 때, 각 질의 구간에 완전히 포함된 제곱 문자열(같은 두 절반이 이어진 문자열)의 개수를 구합니다.
난이도

어려움10점 중 8점

유형
문자열, 문자열 매칭, 누적 합, 분할 정복
정답자
아직 제출이 없습니다

문제

Bob에게 길이가 nn인 문자열 s1s2⋯sns_1s_2\cdots s_n과 qq개의 질의 (li,ri)(l_i, r_i) (i=1,2,…,qi = 1, 2, \ldots, q)가 있다. 각 질의 (li,ri)(l_i, r_i)에 대해, li≤L≤R≤ril_i \le L \le R \le r_i를 만족하고 sLsL+1⋯sRs_L s_{L+1} \cdots s_R이 제곱 문자열인 구간 (L,R)(L, R)의 개수를 구하라.

문자열 t1t2⋯tmt_1t_2\cdots t_m이 제곱 문자열이려면 다음 두 조건을 모두 만족해야 하며, 이 조건을 만족할 때만 제곱 문자열이다.

  • mm은 짝수이다.
  • i=1,2,…,m/2i = 1, 2, \ldots, m/2에 대해 ti=ti+m/2t_i = t_{i+m/2}이다.

입력

입력에는 여러 테스트 케이스가 들어 있다. 첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 다음과 같다.

첫 줄에 정수 nn과 qq가 주어진다. 둘째 줄에 길이 nn의 소문자 문자열 s1s2⋯sns_1s_2\cdots s_n이 주어진다. 이어서 qq개의 줄 중 ii번째 줄에 질의를 나타내는 정수 lil_i와 rir_i가 주어진다.

출력

각 테스트 케이스마다 먼저 "Case #x:" 줄을 출력한다. 여기서 xx는 1부터 시작하는 테스트 케이스 번호다. 이후 각 질의의 답을 한 줄에 하나씩 출력한다.

제한

1≤T≤1001 \le T \le 100, 1≤n,q≤1061 \le n, q \le 10^6, 1≤li≤ri≤n1 \le l_i \le r_i \le n. 모든 테스트 케이스의 nn 합은 10610^6을 넘지 않는다. 모든 테스트 케이스의 qq 합도 10610^6을 넘지 않는다.

힌트

bb, abab, babbab는 제곱 문자열이지만 abba는 제곱 문자열이 아니다.

예제1

  1. 예제 1

    입력
    1
    7 5
    ababbab
    1 4
    2 5
    3 6
    4 7
    1 7
    
    예상 출력
    Case #1:
    1
    1
    1
    1
    3