HDU2222キーワード検索
- テンプレートのタイトル。結果は、Tの小さな配列を開きます 。。
- コード
1つの#include <ビット/ STDC ++ H> 2 の#define Nmaxを10010 3 4 使用して 名前空間STDを、 5 文字 で [数Nmax]、B [ 1000010 ]。 6 int型 T [ 50 * Nmaxを] [ 30 ]。 7 のint F [ 50 * Nmax個]、V [数Nmax * 50 ]。 8 int型 N、CNT = 0、ANS = 0 。 9 10 ボイドイン(){ 11 INT IDX = 0(リットル= STRLEN で); 12 以下のために(int型 i = 0 ; iはL <; iは++ ){ 13 INT X = で [I] - [ A ' 。 14 もし T [IDX] [X] = ++(T [IDX] [X]!)CNT。 15 IDX = T [IDX] [X]。 16 } 17 V [IDX] ++ ; 18 } 19 20 ボイドのinit(){ 21 のために(int型 i = 0 ; iは= CNTを<; iは++ ){ 22 のための(int型 J = 0 ; J < 26; J ++)T [I] [J] = 0 ; 23 F [I] = Vの[I] = 0 ; 24 } 25 、CNT = 0 。 26の ANS = 0 。 27 } 28 29 ボイドBF(){ 30 キュー< INT > Q。 31 のためには、(int型 i = 0 ; iは< 26 ; iは++)場合(T [ 0 ] [i])とq.push(T [ 0 ] [I])。 32 ながら(!q.empty()){ 33 INT U =q.front(); 34 q.pop()。 35 のために(int型 i = 0 ; iが< 26 ; iが++ ){ 36 であれば(T [U] [I]){ 37 F [T [U] [I] =のT [i]が[U] [F]。 38 q.push(T [U] [I])。 39 } 他 T [U] [I] =のT [i]が[U] [F]。 40 } 41 } 42 } 43 44 ボイド(解決){ 45 のint = P 0、L個の=のSTRLEN(B)。 46 のために(int型私= 0 ; 私はリットルを<; 私は++ ){ 47 、INT X = Bの[I] - [ A ' 。 48 のp =のT [P] [X]。 49 のために(INT ANS + = V [J]、V [J] = - ; J &&〜V [J] J = F [J] J = P)1 。 50 } 51 } 52 53 INT メイン(){ 54件 のint CAS。 55 cinを>> CAS; 56 一方(cas-- ){ 57 のinit(); 58 のscanf(" %d個"、&N); 59 のためには、(int型、I = 0 ; iがN <; Iは++){scanf関数(" %sの"、で)。イン(); } 60 BF()。 61 のscanf(" %sの" 、B)。 62 )(解きます。 63 のprintf(" %d個の\ n " 、ANS)。 64 } 65 リターン 0 。 66 }
HDU2896ウイルス