フェイス質問
https://vjudge.net/problem/POJ-3461
問題の解決策
書式#include <cstdioを> する#include <iostreamの> の#include <CStringの> に#define里int型登録 の#define N 1000500 使用して 名前空間はstdを、 INT T、次の[N]、N、M。 チャーS [N]、T [N]。 ボイドGETNEXT(){ 次の[ 0 ] =次の[ 1 ] = 0 ; 用(RI I = 2 ; iが<= N iが++ ){ int型 J =次の[I- 1 ]。 一方、(J && S [J + 1!] = sの[I])J = 次の[J]。 もし(S [J + 1] == S [i])と、次の[I] = J + 1。他に次の[I] = 0 ; } } int型のmain(){ scanf関数(" %のD "、&T)。 一方、(T-- ){ scanf関数(" %sの"、S + 1)。N = STRLEN(S + 1 )。 scanf関数(" %sの"、T + 1)。m個の=のSTRLEN(T + 1 )。 GETNEXT(); int型のk = 0 。 int型の合計= 0 ; 用(RI I =1 ; I <= M; iは++ ){ 一方(K && S [K + 1 ] = T [i])とK =!次の[K]。 もし(S [K + 1 ] == T [i])と{ K ++ 。 もし(kは== N){ K = 次の[K]。 合計 ++ ; } } } のprintf(" %d個の\ n " 、合計)。 } 戻り 0 。 }