POJ 3461

Posted gcyyzf

tags:

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

第一道KMP

以后这个就作为模版了

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
inline int read(){
	int x=0,f=1,ch=getchar();
	while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
	while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
	return x*f;
}
char word[10005];
int len1;
int nxt[10005];
inline void pre(){
	nxt[0]=-1;
	int j=0,k=-1;
	while(j<len1){
		// puts("X");
		if(k==-1||word[k]==word[j]) nxt[++j]=++k;
		else k=nxt[k];
	}
}
char text[1000005];
int len2;
inline int kmp(){
	int i=0,j=0,res=0;
	while(i<len2){
		if(j==-1||text[i]==word[j]) ++i,++j;
		else j=nxt[j];
		if(j==len1) res++,j=nxt[j];
	}
	return res;
}
int main(){
	int T=read();
	while(T--){
		scanf("%s",word);len1=strlen(word);
		scanf("%s",text);len2=strlen(text);
		pre();
		printf("%d
",kmp());
	}
	return 0;
}

  

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

POJ 3461 Oulipo (KMP)

poj 3461 - Oulipo 经典kmp算法问题

POJ 3461 Oulipo KMP算法题解

POJ 3461 Oulipo

POJ3461Olipo

POJ——T 3461 Oulipo