本文主要是介绍poj 3461 Oulipo,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://poj.org/problem?id=3461(kmp入门)
#include<stdio.h>
#include<string.h>
char p[1000000],s[1000000];
int next[1000000];
int n;
void get_next(char *p)
{
next[0]=-1;
int i=-1,j=0;
int len=strlen(p);
while(j<len)
{
if(i==-1||p[i]==p[j])
{
i++;
j++;
next[j]=i;
}else i=next[i];
}
}
int kmp(char *p,char *s)
{
memset(next,0,sizeof(next));
get_next(p);
int i=0,j=0,k=0;
int len1=strlen(p);
int len2=strlen(s);
while(j<len2)
{
if(p[i]==s[j])
{
i++;
j++;
}
else
{
i=next[i];
if(i==-1)
{
i=0;
j++;
}
}
if(i==len1) k++;
}
return k;
}
int main()
{
scanf("%d",&n);
while(n--)
{
scanf("%s",p);
scanf("%s",s);
int ans=kmp(p,s);
printf("%d\n",ans);
}
return 0;
}
这篇关于poj 3461 Oulipo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!