您的位置:首页 > 产品设计 > UI/UE

HDOJ 1711 Number Sequence(KMP)

2013-05-02 23:42 357 查看
超级传送门

KMP,只不过由字符串变成长整形而已,套模板可过。

S[]存放主串,T[]存放匹配串,T[0]和S[0]表示串的长度

AC代码:

/*HDOJ1711
作者:陈佳润
2013-05-02*/
#include<stdio.h>

long next[10005];
long S[1000005],T[10005];

void Get_next(long T[]){//构造next数组
int i=1,j=0;
next[1]=0;
while(i<T[0]){
if(j==0||T[i]==T[j]){
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}

//s[0]和T[0]保存数组长度
int KMP(long S[],long T[]){
int i=0,j=0;
while(i<=S[0]&&j<=T[0]){
if(j==0||S[i]==T[j]){//
i++;
j++;
}else{
j=next[j];
}
}
if(j>T[0])
return i-T[0];//匹配成功,返回起始位置
else
return -1;//匹配失败
}

int main(){
int i,Time;
scanf("%d",&Time);
while(Time--){
scanf("%d%d",&S[0],&T[0]);
for(i=1;i<=S[0];i++)
scanf("%d",&S[i]);
for(i=1;i<=T[0];i++)
scanf("%d",&T[i]);
Get_next(T);
printf("%d\n",KMP(S,T));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: