HDU 1711 Number Sequence

Posted duck_lu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1711 Number Sequence相关的知识,希望对你有一定的参考价值。

结题思路:KMP标准模板题,注意KMP有两个版本,这里的优劣在代码中已体现

技术分享图片
 1 #include <iostream>
 2 #include <cstring>
 3 #include <string>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 int a[1000100];
 8 int b[10100];
 9 int Len_a, Len_b;
10 int Next[10100];
11 void GetNext()
12 {
13     int i = 0, j = Next[0] = -1;
14     while (i < Len_b)
15     {
16         //Version 1
17         if (j == -1 || b[i] == b[j])
18             Next[++i] = ++j;
19         /* 
20              
21             Version 2:
22             if (j == -1 || b[i] == b[j])
23             {
24                 i++;
25                 j++;
26                 Next[i] = (b[i] == b[j] ? Next[j] : j)
27             }
28             改进的 next[] 表与不改进的 next[] 表相比,计算 next[] 表本身的时间慢一点,但 KMP 匹配的时候跳转的平均长度稍大一点。
29 
30             构造后一个 next[] 表只用一次体现不出优势。如果一个模式串要与很多个字符串匹配, 改进的 next[] 构造时间微不足道,匹配的速度就体现出来了。
31             题型匹配:HDU-1686 Oulipo 
32         */
33         else
34             j = Next[j];
35     }
36 }
37 
38 int KMP()
39 {
40     int i = 0, j = 0;
41     GetNext();
42     while (i < Len_a && j < Len_b)
43     {
44         if (j == -1 || a[i] == b[j])
45         {
46             i++;
47             j++;
48         }
49         else
50             j = Next[j];
51     }
52     
53     if (j == Len_b)
54         return i - j + 1;
55     else
56         return -1;
57 }
58 
59 int main(void)
60 {
61     ios::sync_with_stdio(false);
62     
63     int cas;
64     cin >> cas;
65     while (cas--)
66     {
67         cin >> Len_a >> Len_b;
68         for (int i = 0; i < Len_a; ++i)
69             cin >> a[i];
70             
71         for (int j = 0; j < Len_b; ++j)
72             cin >> b[j];    
73             
74         cout << KMP() << endl;
75     }
76     
77     return 0;
78 }
View Code

 

以上是关于HDU 1711 Number Sequence的主要内容,如果未能解决你的问题,请参考以下文章

Number Sequence (HDU 1711)

HDU——T 1711 Number Sequence

Number Sequence HDU - 1711

hdu[1711]number sequence

hdu 1711 Number Sequence

HDU - 1711 Number Sequence