hdu 1711 Number Sequence

来源:互联网 发布:最新狼友域名 编辑:程序博客网 时间:2024/05/17 02:00

题目:点击打开链接

题解:kmp入门题目,居然把模板弄错了,坑爹啊。

学到的东西:不能太依赖模板,不要懒,要自己写。

ac代码:

#include <iostream>#include <string>#include <cstdio>#include <cstring>using namespace std;const int maxn = 2000200;int fail[maxn];int fu[maxn],zi[maxn];int zilong,fulong;int flag;void getfail(int zi[]){    fail[0]=fail[1]=0;    for(int i=1;i<zilong;i++){        int j=fail[i];        while(j&&zi[i]!=zi[j]) j=fail[j];        fail[i+1]=zi[i]==zi[j]?j+1:0;    }}int kmp(int fu[],int zi[]){    int ans=-1;    getfail(zi);    int j=0;    for(int i=0;i<fulong;i++){        while(j&&zi[j]!=fu[i]) j=fail[j];        if(zi[j]==fu[i]) j++;        if(j==zilong) return i-zilong+2;    }    return ans;}int main(){    int T;scanf("%d",&T);    while(T--){        flag=0;        scanf("%d %d",&fulong,&zilong);        for(int i=0;i<fulong;i++)  scanf("%d",&fu[i]);        for(int j=0;j<zilong;j++)  scanf("%d",&zi[j]);        int ans = kmp(fu,zi);        printf("%d\n",ans);    }}


0 0
原创粉丝点击