hdu1711 Number Sequence

http://acm.hdu.edu.cn/showproblem.php?pid=1711

KMP的简单应用啊

直接贴代码了

代码:

 1 #include<iostream>
 2 #include<stdlib.h>
 3 #include<stdio.h>
 4 using namespace std;
 5 #define maxn 1000010
 6 int n,m;
 7 int a[maxn],b[maxn];
 8 int f[maxn];
 9 void callfail()
10 {
11      int i,j=0,k=-1;
12      f[0]=-1;
13      while(j<m)
14      {
15          if(k==-1||b[j]==b[k])
16          {
17              k++;j++;
18              f[j]=k;
19          }
20          else k=f[k];
21      }
22 }
23 int  Answer()
24 {
25   int i=0,j=0;
26   while(i<n&&j<m)
27   {
28     if(j==-1||a[i]==b[j])//j==-1 is important .Remember it!!!
29     {
30         i++;j++;
31         if(j==m) return i-m+1;
32 
33     }
34     else j=f[j];
35   }
36   return -1;
37 }
38 int main()
39 {
40     int t;
41     scanf("%d",&t);
42     while(t--)
43     {
44        scanf("%d%d",&n,&m);
45        for(int i=0;i<n;i++)
46           scanf("%d",&a[i]);
47        for(int i=0;i<m;i++)
48           scanf("%d",&b[i]);
49        callfail();
50       cout<<Answer()<<endl;
51     }
52     return 0;
53 
54 }

 

posted on 2013-08-30 18:11  GyyZyp  阅读(132)  评论(0编辑  收藏  举报

导航