发布于 

Oulipo

Oulipo

POJ 3461

题目来源: POJ

分析

一道裸的KMP,没有什么好说的。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <cstdio>
#include <cstring>

#define MAXN 1000100

char a[MAXN],b[MAXN];
int f[MAXN];
int n,m;
int cnt;

void getFail()
{
f[0] = 0;
//f[1] = 0;
for (int i = 1; i<m; i++)
{
int j = f[i-1];
while (j && b[i]!=b[j]) j = f[j-1];
f[i] = b[i]==b[j]?j+1:0;
}

return;
}

void find()
{
int j = 0;
for (int i = 0; i<n; i++)
{
while (a[i]!=b[j] && j) j = f[j-1];
if (a[i]==b[j]) j++;
if (j==m)
cnt ++;
}
}

int main()
{
int T;
scanf("%d",&T);
while (T--)
{
cnt = 0;

scanf("%s",b);
scanf("%s",a);

n = strlen(a);

m = strlen(b);

getFail();

find();

printf("%d\n",cnt);
}
}

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 [@Songer](https://blog.songer.xyz/) 创建,使用 Stellar 作为主题。