HDU 1686 Oulipo (KMP)

题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110986#problem/G

代码:

#include<stdio.h>
#include<string.h>

using namespace std;

char w[10005],t[1000005];
int next[10005];
int N,M;

void get_next()
{
    int i=0,j=next[0]=-1;
    while(i<M)
    {
        if(j==-1||w[i]==w[j])
        {
            i++;j++;
            next[i]=j;
        }
        else j=next[j];
    }
}

int kmp()
{
    int i=0,j=0;
    int num=0;
    while(i<N)
    {
        if(j==-1||t[i]==w[j])
        {
            i++;j++;
        }
        else j=next[j];
        if(j==M)
        {
            num++;
            j=next[j];
        }
    }
    printf("%d\n",num);
}

int main()
{
    int c,h,i;
    scanf("%d",&c);
    while(c--)
    {
        scanf("%s",w);
        scanf("%s",t);
        N=strlen(t);
        M=strlen(w);
        get_next();
        kmp();
    }
}


对于KMP算法还是一知半解。再看看吧。


是时候重新确定目标了。不出意外,大一的暑假,先去北大学习。回学校集训。

目标9月的亚洲区拿铜。加油。这次一定能成功。


你可能感兴趣的:(HDU 1686 Oulipo (KMP))