흥미진진한 메뉴

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

요약
N개의 문자열과 각 위치의 기쁨 값이 주어질 때, 모든 부분 문자열에 대해 길이, 끝 위치의 기쁨 값, 그 부분 문자열을 접두사로 갖는 문자열 개수의 곱의 최댓값을 구한다.
난이도

어려움10점 중 8점

유형
트라이, 문자열, 배열, 구현
정답자
아직 제출이 없습니다

문제

식당에 NN개의 메뉴가 있고, 각 메뉴는 문자열 S1,…,SNS^1, \dots , S^N로 주어진다. 각 문자열 SiS^i에는 같은 길이의 기쁨 수치 배열 AiA^i가 대응된다. 이 문제에서는 세 정수 (i,j,k)(i, j, k)로 정의되는 서브메뉴를 고른다. ii는 메뉴의 번호이고, j,kj, k는 고른 메뉴에서 부분 문자열을 지정한다.

품질 QQ가 다음과 같이 정의될 때, 품질이 가장 높은 서브메뉴를 찾아야 한다.

Q(i,j,k)=popularity(Sj,ki)⋅Aki⋅∣Sj,ki∣Q(i, j, k) = \text{popularity}(S^i_{j,k}) \cdot A^i_k \cdot |S^i_{j,k}|

  • Sj,kiS^i_{j,k} = 문자열 SiS^i의 부분 문자열 [j,k][j, k] (단, j,kj, k는 1부터 시작하며 양 끝을 포함한다).
  • popularity(Sj,kiS^i_{j,k}) = S1,…,SNS^1, \dots , S^N 가운데 서브메뉴 문자열 Sj,kiS^i_{j,k}를 접두사로 포함하는 메뉴의 수.
  • ∣Sj,ki∣|S^i_{j,k}|는 서브메뉴의 크기, 즉 서브메뉴를 나타내는 부분 문자열의 길이이다.
  • AkiA^i_k는 서브메뉴의 기쁨 수치이며, ii번째 배열의 kk번째 원소이다. 여기서 인덱스 jj는 사용되지 않는다.

품질이 가장 높은 서브메뉴를 찾을 수 있는가? 함수 QQ의 최댓값을 출력하라.

입력

첫 줄에는 테스트 케이스의 수 TT가 주어진다.

각 테스트 케이스의 첫 줄에는 식당의 메뉴 수 NN (1≤N≤1051 \le N \le 10^5)이 주어진다.

이어서 NN개의 줄이 주어지고, ii번째 줄에는 ii번째 메뉴를 나타내는 문자열 SiS^i가 주어진다. 모든 메뉴는 비어 있지 않은 소문자 영어 알파벳 문자열이며, 길이의 합은 테스트 케이스마다 10510^5를 넘지 않는다.

그다음 NN개의 줄이 주어지고, ii번째 줄에는 배열 AiA^i가 주어진다. AiA^i의 길이는 문자열 SiS^i와 같고, 0≤Aki≤1090 \le A^i_k \le 10^9이다. 각 배열의 값은 공백으로 구분된다.

출력

각 테스트 케이스마다 가장 좋은 서브메뉴 (i,j,k)(i, j, k)에 해당하는 최대 품질 QQ를 한 줄에 출력한다.

힌트

주어진 두 케이스의 정답에 해당하는 삼중항은 각각 (1,1,5)(1, 1, 5)와 (1,4,5)(1, 4, 5)이다.

예제1

  1. 예제 1

    입력
    2
    2
    aabaa
    aa
    0 0 0 0 100
    0 1
    4
    bbbaa
    aa
    aab
    aax
    0 0 0 0 100
    0 0
    0 0 0
    0 0 0
    
    예상 출력
    500
    600