博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KMP POJ 3461 Oulipo
阅读量:6910 次
发布时间:2019-06-27

本文共 2958 字,大约阅读时间需要 9 分钟。

 

1 /* 2     题意:问一个串在另一个串出现的次数(可重复) 3     KMP:模板题 4 */ 5 /************************************************ 6 * Author        :Running_Time 7 * Created Time  :2015-8-9 19:45:40 8 * File Name     :POJ_3461.cpp 9  ************************************************/10 11 #include 
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 #include
19 #include
20 #include
21 #include
22 #include
23 #include
24 #include
25 #include
26 #include
27 #include
28 using namespace std;29 30 #define lson l, mid, rt << 131 #define rson mid + 1, r, rt << 1 | 132 typedef long long ll;33 const int MAXN = 1e6 + 10;34 const int INF = 0x3f3f3f3f;35 const int MOD = 1e9 + 7;36 int nex[MAXN];37 char s[MAXN], t[MAXN];38 39 void get_nex(int lm) {40 int i = 0, j = -1; nex[0] = -1;41 while (i < lm) {42 if (j == -1 || t[j] == t[i]) {43 j++; i++; nex[i] = j;44 }45 else j = nex[j];46 }47 }48 49 int KMP(void) {50 int ln = strlen (s); int lm = strlen (t);51 get_nex (lm);52 int i = 0, j = 0; int ans = 0;53 while (i < ln) {54 while (j != -1 && t[j] != s[i]) j = nex[j];55 j++; i++;56 if (j >= lm) {57 ans++; j = nex[j];58 }59 }60 return ans; 61 }62 63 int main(void) { //POJ 3461 Oulipo64 int T; scanf ("%d", &T);65 while (T--) {66 scanf ("%s%s", t, s); 67 printf ("%d\n", KMP ());68 }69 70 return 0;71 }
1 /* 2     题目链接:http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4194 3      给你两个字符串A,B,请输出B字符串在A字符串中出现了几次(不可重复) 4 */ 5 /************************************************ 6 * Author        :Running_Time 7 * Created Time  :2015-8-9 19:45:40 8 * File Name     :ZSTU_4194.cpp 9  ************************************************/10 11 #include 
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 #include
19 #include
20 #include
21 #include
22 #include
23 #include
24 #include
25 #include
26 #include
27 #include
28 using namespace std;29 30 #define lson l, mid, rt << 131 #define rson mid + 1, r, rt << 1 | 132 typedef long long ll;33 const int MAXN = 1e6 + 10;34 const int INF = 0x3f3f3f3f;35 const int MOD = 1e9 + 7;36 int nex[MAXN];37 char s[MAXN], t[MAXN];38 39 void get_nex(int lm) {40 int i = 0, j = -1; nex[0] = -1;41 while (i < lm) {42 if (j == -1 || t[j] == t[i]) {43 i++; j++; nex[i] = j;44 }45 else j = nex[j];46 }47 }48 49 int KMP(void) {50 int ln = strlen (s);51 int lm = strlen (t);52 get_nex (lm);53 int i = 0, j = 0; int ans = 0;54 while (i < ln) {55 while (j != -1 && s[i] != t[j]) j = nex[j];56 i++; j++;57 if (j == lm) {58 ans++; j = 0; //改动这里就是重新匹配59 }60 }61 return ans; 62 }63 64 int main(void) {65 while (scanf ("%s%s", s, t) == 2) {66 printf ("%d\n", KMP ());67 }68 69 return 0;70 }71 72 不可重复的匹配
不可重复的匹配

 

转载于:https://www.cnblogs.com/Running-Time/p/4717802.html

你可能感兴趣的文章
Windows 8 Metro App开发[6]访问Assets文件夹
查看>>
Cpython的全局解释器锁(GIL)
查看>>
session共享方法
查看>>
ASP.NET AJAX web chat application
查看>>
14--Rails的ActiveView2
查看>>
UVa 496 - Simply Subsets
查看>>
java基础思维导图大全
查看>>
C# 面向对象7 命名空间
查看>>
MySQL单机上多实例安装
查看>>
java8 增强的Iterator遍历集合元素
查看>>
Codeforces Round #566 (Div. 2) B. Plus from Picture
查看>>
Linux命令(23)grep命令的使用
查看>>
自己动手制作一个本地的yum仓库
查看>>
2015年毕业生收到的offer和薪资透露
查看>>
新手老手都离不开八大开发工具
查看>>
Ubuntu下用命令行快速打开各类型文件(转)
查看>>
C语言程序设计_zju——第3周编程练习1_时间换算
查看>>
Nodejs调用Aras Innovator服务,处理AML并返回AML
查看>>
纯数学教程 Page 324 正项级数绝对收敛的一种判别法
查看>>
Excel自定义函数开发手记
查看>>