题目大意:

题目大意:
中文题,题目背景就不说了,抽象化就是给你两个字符串,问你把第一个字符串切成若干条,能得到多少第二个字符串。

代码:

#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));
    }
}