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

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

팰린드롬 세기

시간 제한2초메모리 제한64 MB

요약
소문자로 이루어진 문자열에서 각 구간 질의 안에 완전히 포함된 팰린드롬 부분 문자열 개수를 구합니다.
난이도

어려움10점 중 8점

유형
문자열 매칭, 세그먼트 트리, 정렬, 수학
정답자
아직 제출이 없습니다

문제

모의고사를 열고 싶었지만 낼 문제가 없던 운영진은 머릿속에 떠오른 두 낱말, 팰린드롬과 자료구조를 섞어 문제를 내기로 했다.

승현이가 알파벳 소문자로만 이루어진 문자열 SS를 만들었다. 1≤i≤j≤∣S∣1 \le i \le j \le |S|인 두 정수 ii, jj에 대해 S[i..j]S[i..j]는 SS의 ii번째 문자부터 jj번째 문자까지를 차례로 이어 붙인 부분문자열이다.

질의 하나는 두 정수 aa, bb로 주어진다. 각 질의마다 S[a..b]S[a..b] 안에 놓인 팰린드롬이 몇 개인지 세면 된다. 다시 말해 a≤x≤y≤ba \le x \le y \le b이면서 S[x..y]S[x..y]가 팰린드롬인 순서쌍 (x,y)(x, y)의 개수를 구한다. 같은 문자열이라도 시작 위치가 다르면 따로 센다.

입력

첫째 줄에 승현이가 만든 문자열 SS가 주어진다. SS는 알파벳 소문자 a부터 z까지로만 이루어져 있고, 길이는 1≤∣S∣≤100 0001 \le |S| \le 100\,000이다.

둘째 줄에 질의의 개수 QQ (1≤Q≤300 0001 \le Q \le 300\,000)가 주어진다. 이어지는 QQ개의 줄에 각각 두 정수 aia_i와 bib_i (1≤ai≤bi≤∣S∣1 \le a_i \le b_i \le |S|)가 주어진다.

출력

질의마다 S[ai..bi]S[a_i..b_i] 안에 놓인 팰린드롬의 개수를 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.

힌트

문자열 T=t1t2t3⋯tnT = t_1 t_2 t_3 \cdots t_n이 팰린드롬이라는 것은 앞에서 뒤로 읽으나 뒤에서 앞으로 읽으나 같다는 뜻이다. 즉 t1t2t3⋯tn−1tn=tntn−1⋯t3t2t1t_1 t_2 t_3 \cdots t_{n-1} t_n = t_n t_{n-1} \cdots t_3 t_2 t_1을 만족하는 TT가 팰린드롬이다. 길이가 1인 문자열은 언제나 팰린드롬이다.

∣S∣|S|는 문자열 SS의 길이이다.

예제2

  1. 예제 1

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

    입력
    aabb
    4
    1 4
    1 2
    3 4
    2 3
    
    예상 출력
    6
    3
    3
    2