만드는 중입니다

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

LCP 질의

시간 제한2.5초메모리 제한1024 MB

요약
주어진 문자열 s_i와 t_j로, 각 질의가 지정한 t_j들을 이어 붙인 문자열과 모든 s_i의 최장 공통 접두사 길이의 합을 구합니다.
난이도

보통10점 중 7점

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

문제

문자열 xx가 문자열 yy의 접두사(prefix)라는 것은 yy의 마지막 글자를 0번 이상 반복해서 지워서 xx를 얻을 수 있다는 뜻이다. 예를 들어 abac, aba, ab, a, 빈 문자열은 모두 abac의 접두사이다.

두 문자열 xx, yy에 대해 LCP(x,y)\text{LCP}(x, y)는 둘의 가장 긴 공통 접두사의 길이이다. 예를 들어 abacab과 abacbba의 가장 긴 공통 접두사는 abac이므로 두 문자열의 LCP\text{LCP}는 44이다. 두 문자열은 항상 빈 문자열을 공통 접두사로 가지므로 LCP(x,y)\text{LCP}(x, y)는 언제나 정의된다.

소문자 영문자로 이루어진 nn개의 문자열 s1,…,sns_1, \dots, s_n과 mm개의 문자열 t1,…,tmt_1, \dots, t_m이 주어진다. 이어서 qq개의 질의가 주어진다. 각 질의는 정수 수열 a1,…,aka_1, \dots, a_k로 주어진다. uu를 ta1,…,takt_{a_1}, \dots, t_{a_k}를 이어 붙인 문자열이라 할 때, 각 질의마다 ∑i=1nLCP(u,si)\sum_{i=1}^{n}{\text{LCP}(u, s_i)}를 구하라.

입력

입력은 다음 형식으로 하나의 테스트 케이스가 주어진다.

nn

s1s_1

⋮\vdots

sns_n

mm

t1t_1

⋮\vdots

tmt_m

qq

query1\text{query}_1

⋮\vdots

queryq\text{query}_q

첫 줄에 정수 nn이 주어진다. 다음 nn개 줄에는 비어 있지 않은 문자열 sis_i가 한 줄에 하나씩 주어진다. 다음 줄에는 정수 mm이 주어진다. 이어서 mm개 줄에 비어 있지 않은 문자열 tjt_j가 한 줄에 하나씩 주어진다. 다음 줄에는 정수 qq가 주어지고, 이어서 qq개의 질의가 한 줄에 하나씩 주어진다. 각 질의는 다음 형식이다.

kk a1a_1 ⋯\cdots aka_k

kk는 정수 수열의 길이를 나타내는 양의 정수이다. 각 aia_i는 1 이상 mm 이하의 정수이다.

제약 조건은 1≤n≤200 0001 \le n \le 200\,000, 1≤m≤200 0001 \le m \le 200\,000, 1≤q≤200 0001 \le q \le 200\,000이다. sis_i 길이의 합은 200 000200\,000을 넘지 않는다. tit_i 길이의 합도 200 000200\,000을 넘지 않는다. 모든 질의의 kk의 합은 200 000200\,000을 넘지 않는다.

출력

qq개의 줄을 출력하라. ii번째 줄에는 ii번째 질의의 답을 출력한다.

예제1

  1. 예제 1

    입력
    5
    abcde
    aaa
    a
    ab
    bcd
    5
    a
    bc
    de
    aaaa
    b
    5
    1 1
    3 1 2 3
    2 2 3
    5 5 4 3 2 1
    3 3 3 3
    
    예상 출력
    4
    9
    3
    1
    0