HDU 1686 Oulipo(KMP)

1090 ワード

タイトル: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
",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月のアジアエリアで銅を持つことを目標にしています。頑張って!今度はきっと成功します。