HDU 1711 Number Sequence

来源:互联网 发布:中日韩围棋 知乎 编辑:程序博客网 时间:2024/06/06 02:49

Compilation Error 了两次,然后过了QAQ

第一次是因为,我用了next[]数组,数组名字应该是和类里面变量或者函数重名了;

第二次是因为,我复制的时候漏了<iostream>;

kmp算法的模板题目。

#include <iostream>#include <stdio.h>#include <queue>#include <algorithm>#include <string>#include <cstring>using namespace std;const int maxm=1000000+5;int test,n,m;int p[maxm],k[maxm];int nexta[maxm];void nextak(){    int i,j;    i=0;    j=-1;    nexta[0]=-1;    while(i<m-1){        if(j==-1 || k[j]==k[i]){            if(k[j+1]==k[i+1]) nexta[++i]=nexta[++j];            else nexta[++i]=++j;        }        else j=nexta[j];    }}//j=-1,i=0, k[0]=k[1] nexta[1]=nexta[0] else nexta[1]=0int kmp(){    int i,j;    i=j=0;    while(i<n &&j<m){        if(j==-1 ||k[j]==p[i]){            j++;            i++;        }        else j=nexta[j];    }    if(j==m) return i-m;    else return -2;}int main(){   scanf("%d",&test);   while(test--){     cin>>n>>m;     for(int i=0;i<n;i++) scanf("%d",&p[i]);     for(int i=0;i<m;i++) scanf("%d",&k[i]);     //nexta 数组     nextak();     //KMP     int ans=kmp()+1;     cout<<ans<<endl;   }   return 0;}

我用的是KMP的优化版本~

原创粉丝点击