[省选前题目整理][POJ 3461]Oulipo(KMP)
2015-04-08 08:49
489 查看
题目链接
http://poj.org/problem?id=3461题目大意
给出模式串W和主串T,求W在T中的出现次数。思路
最基础的KMP。代码
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> #define MAXN 1001000 #define MAXM 10010 using namespace std; char word[MAXM],text[MAXN]; int next[MAXM]; void getnext(char str[],int len) { int k=0; next[1]=0; for(int i=2;i<=len;i++) { while(k>0&&str[k+1]!=str[i]) k=next[k]; if(str[k+1]==str[i]) k++; next[i]=k; } } int match(char W[],int lenW,char T[],int lenT) { int ans=0; getnext(W,lenW); int k=0; //W已经匹配的长度 for(int i=1;i<=lenT;i++) { while(k>0&&W[k+1]!=T[i]) k=next[k]; if(W[k+1]==T[i]) k++; if(k==lenW) { ans++; k=next[k]; } } return ans; } int main() { int T; scanf("%d",&T); while(T--) { memset(next,0,sizeof(next)); scanf("%s",word+1); scanf("%s",text+1); printf("%d\n",match(word,strlen(word+1),text,strlen(text+1))); } return 0; }
相关文章推荐
- POJ 题目3461 Oulipo(KMP)
- poj 3461 Oulipo ----KMP,字符串处理
- poj 3461:Oulipo(KMP模版)
- POJ 3461 Oulipo(KMP:统计一个串出现的次数)
- [KMP求模式在主串出现次数]POJ 3461 Oulipo
- 【KMP】 POJ 3461 Oulipo
- POJ 3461 Oulipo(KMP求匹配次数)
- POJ 3461 Oulipo (kmp入门)
- poj 3461 Oulipo(KMP)
- POJ 3461 Oulipo(KMP模板)
- POJ 3461 Oulipo(KMP)
- poj 3461 Oulipo(KMP,喜闻乐见纯模板)
- 【哈希&KMP模板题】-POJ-3461-Oulipo
- poj 3461 Oulipo (KMP)
- POJ 3461 Oulipo---kmp
- KMP模板题 poj 3461 Oulipo
- poj 3461 Oulipo (KMP)
- HDU 1686 Oulipo , 同 POJ 3461 Oulipo (字符串匹配,KMP)
- Oulipo - POJ 3461 KMP
- POJ 3461 Oulipo KMP