当前位置: 代码迷 >> 综合 >> HDU - 2087 剪花布条(KMP)
  详细解决方案

HDU - 2087 剪花布条(KMP)

热度:13   发布时间:2023-11-25 09:04:58.0

HDU - 2087 剪花布条

#include<cstdio>
#include<cstring>
const int N = 1010, M = 1010;
char a[N],b[M];
int ne[M];
int n,m,c;
void get_next()
{
    for(int i=2,j=0;i<=m;i++){
    while(j&&b[i]!=b[j+1]) j=ne[j];if(b[i]==b[j+1]) j++;ne[i]=j;}
}
void get_kmp()
{
    for(int i=1,j=0;i<=n;i++){
    while(j&&a[i]!=b[j+1]) j=ne[j];if(a[i]==b[j+1]) j++;if(j==m) j=0,c++;}
}
int main()
{
    while(scanf("%s",a+1)!=EOF){
    if(a[1]=='#') break;scanf("%s",b+1);n=strlen(a+1),m=strlen(b+1);c=0;get_next();get_kmp();printf("%d\n",c);}return 0;
}