2019년 7월 25일

T1. 일치

  KMP는 것을 살펴이지만, 잊어 버렸습니다.

    아, 템플릿 그것의 뒷면에!

     아? ! 폭력 72 점? ! ? ! ? !       해!

     일반적으로 KMP의 솔루션은 다음 get_next 캐릭터와 (B)의 연결 (및 약간 혼잡 사이), 양성이고;

    더 이상 없습니다.

1 #INCLUDE <. 비트 / stdc ++ H>
 2  #DEFINE가 긴 긴 버리는
 3  #DEFINE의 RE 레지스터
 4  이용한  스페이스 성병;
5 인라인 INT의 R () {
 6      RE의  C = getchar가 (); INT X = 0 , t는 = 1 ;
7 일      동안 (c < ' 0 ' || C> ' 9 ' ) { 경우 (c == ' - ' ) t = - 1 ; C = getchar가 ();}
 8      하면서 (c> =' 0 ' && C <= ' 9 ' ) {(X) = (X << 3 ) + (X << 1 ) + C - ' 0 ' , C = getchar가 ();}
 9      복귀 의 X *의 t;
10  }
 11  CONST의  INT의 maxn = 5,000,010 ;
12  INT LA, LB, LC;
13  문자 A [maxn], B [maxn], C [maxn, D;
14  INT의 NXT [maxn];
(15)  보이드 get_nxt () {
 16      INT를 p = 0 ; NXT [ 1 ] = 0 ;
(17)      에 대한이 ( int로 I = 2 ; I <= (LC); 나는 ++ ) {
 18          반면 (p & & C [P + 1 ] = (C)의 [I]!) p = NXT [P];
19 일          경우 (c를 [피 + 1 ] == C [I])를 P ++ ;
20          NXT [내가] = P;
21      }
 22  }
 23  INT 의 main () {
 24  //         freopen을 ( "in1.txt", "R", 표준 입력); 
25      의 INT t;
26      T = R ();
27 일      동안 (t-- ) {
 28          라 R = (), LB = R ();
(29)         scanf와 ( " %의 S " , A + 1 );
30          CIN >> D;
(31)          에 대한이 ( int로 I = 1 ; I <= (LB); 나는 ++ )
 32 개              (B)는 [I] = A [I];
33          B [++ LB = D;
(34)          에 대한이 ( int로 I = 1 ; i가 라 = <; 내가 ++) [I] = C A [I];
35          LC = 라;
36 개          C [++ LC = ' ~ ' ;
37 개          C [++ LC = ' ! ' ;
(38)         위한 ( int로 난 = 1 ; I <= (LB); 나는 ++)의 C = [내가 LC +] B가 [I];
39          LC + = LB;
40          get_nxt ();
41          의 printf ( " % D \ 없음 " , NXT [LC]);
42      }
 43      반환  0 ;
44 }
코드보기        

T2.

T3. 초밥

추천

출처www.cnblogs.com/sdfzjdx/p/11244648.html