首页 > 其他 > 详细

HDU 1711 Number Sequence

时间:2014-07-22 22:51:43      阅读:316      评论:0      收藏:0      [点我收藏+]

经典kmp

 

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 
 5     int n,m;
 6     int a[1000010],b[10010],next[10010];
 7 
 8 void getnext (int *s,int *next){
 9     next[0]=next[1]=0;
10     for (int i=1;i<m;i++){
11         int j=next[i];
12         while (j&&s[i]!=s[j])
13             j=next[j];
14         next[i+1]=s[i]==s[j]?j+1:0;
15     }
16 }
17 
18 int kmp (int *a,int *b,int *next){
19     getnext (b,next);
20     int j=0;
21     for (int i=0;i<n;i++){
22         while (j&&a[i]!=b[j])
23             j=next[j];
24         if (a[i]==b[j])
25             j++;//cout<<j<<" ";
26         if (j==m)
27             return i-m+2;
28     }
29     return -1;
30 }
31 
32 int main (){
33     int t;
34     scanf ("%d",&t);
35     while (t--){
36         scanf ("%d %d",&n,&m);
37         for (int i=0;i<n;i++)
38             scanf ("%d",&a[i]);
39         for (int i=0;i<m;i++)
40             scanf ("%d",&b[i]);
41         int ans=kmp (a,b,next);
42         printf ("%d\n",ans);
43     }
44     return 0;
45 }

HDU 1711 Number Sequence,布布扣,bubuko.com

HDU 1711 Number Sequence

原文:http://www.cnblogs.com/gfc-g/p/3855238.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!