hihocoder 1015(KMP)

来源:互联网 发布:罗宾 知乎 编辑:程序博客网 时间:2024/05/22 03:46

传送门

再刷模板ing。

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;char T[1000004],W[10004];int n,m,f[10004];inline void getfail(char *W,int m) {f[0]=f[1]=0;for (register int i=1;i<m;++i) {int j=f[i];while (j&&W[i]^W[j]) j=f[j];f[i+1]=W[i]==W[j]?j+1:0;}}inline void kmp(char *T,char *W,int n,int m) {int sum=0;getfail(W,m);int j=0;for (register int i=0;i<n;++i) {while (j&&T[i]^W[j]) j=f[j];if (T[i]==W[j]) ++j;if (j==m) ++sum;}printf("%d\n",sum);}int main() {int kase;scanf("%d",&kase);while (kase--) {scanf("%s%s",W,T);n=strlen(T),m=strlen(W);kmp(T,W,n,m);}return 0;}