题目大意:
题目大意:
中文题,题目背景就不说了,抽象化就是给你两个字符串,问你把第一个字符串切成若干条,能得到多少第二个字符串。
代码:
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<string.h>
#define maxn 1050
using namespace std;
char m[maxn];
char a[maxn];
int my_next[maxn];
void build_next()
{
my_next[0]=-1;
int k=-1,j=0;
while(m[j]!=0)
{
if(k!=-1&&m[j]!=m[k])
{
k=my_next[k];continue;
}
j++;k++;
if(m[j]==m[k])my_next[j]=my_next[k];
else my_next[j]=k;
}
}
int lm,la;
int main()
{
while(scanf("%s",a))
{
if(a[0]=='#')break;
scanf("%s",m);
lm=strlen(m);
la=strlen(a);
if(la<lm)
{
printf("0\n");
continue;
}
build_next();
int num=0;
int j=0,i=0;
while(1)
{
if(i>=la)break;
if(a[i]!=m[j])
{
j=my_next[j];
if(j==-1)
{
i++;j++;
}
continue;
}
i++;j++;
if(j==lm)
{
num++;
j=0;
}
}
printf("%d\n",num);
memset(m,0,sizeof(m));
memset(a,0,sizeof(a));
memset(my_next,0,sizeof(my_next));
}
}