POJ 3461 Oulipo (KMP)

Posted 小时のblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3461 Oulipo (KMP)相关的知识,希望对你有一定的参考价值。

传送门

题目大意

有n次询问,问W串在T串中出现的次数

题解

KMP

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,lenw,lent,nxt[10009];
char w[10009],t[1000009];
void getnext(){
    for(int i=2,j=0;i<=lenw;i++){
        while(w[i]!=w[j+1]&&j)j=nxt[j];
        if(w[i]==w[j+1])nxt[i]=++j;
    }
}
int kmp(){
    int js=0;
    for(int i=1,j=0;i<=lent;i++){
        while(t[i]!=w[j+1]&&j)j=nxt[j];
        if(t[i]==w[j+1])j++;
        if(j==lenw){js++;j=nxt[lenw];}
    }
    return js;
}
int main(){
    scanf("%d",&n);
    while(n--){
        scanf("%s\n%s",w+1,t+1);
        lenw=strlen(w+1);lent=strlen(t+1);
        getnext();
        printf("%d\n",kmp());
    }
    return 0;
}

 

以上是关于POJ 3461 Oulipo (KMP)的主要内容,如果未能解决你的问题,请参考以下文章

poj 3461 - Oulipo 经典kmp算法问题

POJ 3461 Oulipo KMP算法题解

poj 3461 Oulipo(KMP)

POJ3461 Oulipo[KMP]

POJ 题目3461 Oulipo(KMP)

POJ3461 Oulipo[KMP]学习笔记