난창 (南昌) 초청 제목, 사전 트리
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; 타입 정의 긴 긴 LL; LL A [ 26 ]; 문자열 S [ 100005 ]; LL의 트라이 [ 200,008 ] [ 26 ]; LL의 V [ 200,005 ]; LL 더하다 = 1 ; LL의 CNT [ 200,005 ]; LL의 B [ 100005 ]; 게요 N, 모드; 보이드 인서트 ( 스트링 (S) 의 INT (X)) { INT의 p = 1 ; INT LEN =s.length (); LL의 t = 1 ; 위한 ( int로 I = 0 ; I <렌; 내가 ++ ) { t = (t에서의 * A [S [I] - ' ' ]) % 개조; 경우 (트라이 [P] [S [I]가 - ' ' ] == 0 ) { 트라이 [P] [S [I] - ' ' = ++ TOT; } P = 트라이 [P] [S [I] - ' ' ]; CNT [P] ++ ; V [P]는 = t를; } B는 [X]= t; } LL ANS = 0 ; 보이드 검색 ( 스트링 (S) 의 INT (X)) { INT의 p = 1 ; INT LEN = s.length (); 위한 ( int로 I = 0 ; I <렌; 내가 ++ ) { P = 트라이 [P] [S [I] - ' ' ]; 경우 (V [P]> B [X]) { ANS + = CNT [P]; } } } INT 주 () { scanf와을 ( " %의 LLD의 %의 LLD " , N, 개조); 위한 ( int로 I = 0 ; I <는 26 나 ++; {) 는 scanf ( " %의 LLD를 " , A [I]); } 에 대해 ( int로 I = 0 ; I <N은, 내가 ++ ) { CIN >> S [I]; (S [i]는 i)를 삽입; } 에 대해 ( int로 I = 0 ; I <N은, 내가 ++ ) { 검색 (S [i]를, I); COUT << ANS << ' ' ;0 ; } }