您的位置:首页 > 其它

poj 3461 Oulipo(KMP)

2015-07-09 10:14 459 查看
题目:http://poj.org/problem?id=3461

大意是这样的:在一篇没有空格的文章中找到给定的词,统计出现的次数输出。

用KMP求出前缀-后缀编码,将词当做模式串在文章中不断移动寻找相同的词。

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn1=1e4+5,maxn2=1e6+5;
char s1[maxn1],s2[maxn2];
int snext[maxn1],len;
void getnext(){
    int i=0,j=-1;
    snext[0]=-1;
    while(i<=len){
        if(j==-1||s1[i]==s1[j])snext[++i]=++j;
        else j=snext[j];
    }
}
int main()
{
    //freopen("cin.txt","r",stdin);
    int t,i,j;
    cin>>t;
    while(t--){
        scanf("%s%s",s1,s2);
        len=strlen(s1);
        getnext();
        int ans=0,length=strlen(s2);
        i=0,j=0;
        while(i<length){
            if(j==-1||s1[j]==s2[i]){
                i++;
                j++;
            }
            else j=snext[j];
            if(j==len){
                ans++;
                j=snext[j];
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: