首页 > 其他 > 详细

HDU - 1711 Number Sequence

时间:2014-07-27 23:11:29      阅读:462      评论:0      收藏:0      [点我收藏+]

  题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1711

  改进的模式匹配算法--KMP算法,时间复杂度有O(n*m)降到O(n+m),求解next数组之后与常规的模式匹配算法相同。

  

 1 #include<stdio.h>
 2 const int maxn=1000000+10,maxm=10000+5;
 3 int a[maxn],b[maxm],next[maxm];
 4 void get_next(int m)
 5 {
 6     int i=1,j=0;
 7     next[1]=0;
 8     while(i<m){
 9         if(j==0 || b[i]==b[j]) {i++;j++;next[i]=j;}
10         else j=next[j];
11     }
12 }
13 int get_index(int n,int m)
14 {
15     int i=1,j=1;
16     while(i<=n && j<=m){
17         if(j==0 || a[i]==b[j]){
18             i++;
19             j++;
20         }
21         else
22             j=next[j];
23     }
24     if(j>m)
25         return i-m;
26     else
27         return -1;
28 }
29 int main()
30 {
31     int t;
32     scanf("%d",&t);
33     while(t--){
34         int n,m;
35         scanf("%d%d",&n,&m);
36         for(int i=1;i<=n;i++)
37             scanf("%d",&a[i]);
38         for(int i=1;i<=m;i++)
39             scanf("%d",&b[i]);
40         get_next(m);
41         int ans=get_index(n,m);
42         printf("%d\n",ans);
43     }
44     return 0;
45 }

 

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

HDU - 1711 Number Sequence

原文:http://www.cnblogs.com/BMESwimming/p/3871828.html

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