hdoj 1686 Oulipo

来源:互联网 发布:宁波行知小学总课表 编辑:程序博客网 时间:2024/04/25 17:16

题目链接:Oulipo

题目大意:给你一个模式串和原串,计算模式串在原串里面出现的次数

题目思路:直接KMP就好

#include <bits/stdc++.h>using namespace std;const int maxn = 1e6+10;int n,Next[maxn];char mo[maxn],str[maxn];int main(){    scanf("%d",&n);    while(n--){        memset(Next,-1,sizeof(Next));        scanf("%s%s",mo,str);        int i = 0,j = -1,len = strlen(mo);        while(i < len){            if(j == -1||mo[i] == mo[j]) Next[++i] = ++j;            else j = Next[j];        }        int ans = 0,len1 = strlen(str);        i = j = 0;        while(i < len1){            if(j == -1||str[i] == mo[j]) ++i,++j;            else j = Next[j];            if(j == len) ans++;        }        printf("%d\n",ans);    }    return 0;}