hihocoder #1015 kmp
2016-06-13 18:02
429 查看
kmp比较裸的
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <string> #include <cmath> using namespace std; #define pr(x) cout << #x << ": " << x << " " #define pl(x) cout << #x << ": " << x << endl; class kmp { private: static const int maxn = int(1e6) + 13; int n, slen, plen; char p[maxn], s[maxn]; int next[maxn]; public: void input(void) { std::cin >> n; while (n--) { std::cin >> p >> s; slen = strlen(s), plen = strlen(p); getnext(); std::cout << getcnt() << std::endl; } } int getcnt(void) { int i = 0, j = 0, cnt = 0; while (i < slen) { if (j == -1 || p[j] == s[i]) i++, j++; else j = next[j]; if (j == plen) { cnt++; j = next[j]; } } return cnt; } void getnext(void) { next[0] = -1; int k = -1, j = 0; while (j <= plen) { if (k == -1 || p[j] == p[k]) { j++, k++; next[j] = k; } else { k = next[k]; } } } }; int main(void) { #ifdef LOCAL freopen("in.txt", "r", stdin); #endif kmp temp; temp.input(); }
相关文章推荐
- opencv的Filestorage,待学习
- HashMap实现原理
- BZOJ4597: [Shoi2016]随机序列
- C#属性和变量的区别学习
- android java.io.IOException: open failed: EBUSY (Device or resource busy)
- Android_Vitamio使用(待完善)
- hdu 2119 Matrix【最小点覆盖-二分匹配】
- iOS中的内边距是什么
- [C++ 面试基础知识总结] 顺序容器
- 构建之法阅读笔记06
- HDU1004 查气球
- Runtime 解析字典自动生成属性代码 及 字典转模型方式一 KVC/Runtime
- Hive 按某列的部分排序 以及 删列操作
- 两天三场Java实习生面试总结
- MySQL数据库表设计优化
- 练习
- Git源码管控规范
- vba 判断是否为数字
- Eclipse Myeclipse 设定文件的默认打开方式
- Exchange DAG学习笔记