hihoCoder 1015 KMP算法
2015-06-16 12:04
399 查看
http://hihocoder.com/problemset/problem/1015
因为kmp算法只预处理b串,因而适合求解,给定一个串和一群不同的a串,问b是那些a串的子串.
或者查找模式串在原串出现了几次.
因为kmp算法只预处理b串,因而适合求解,给定一个串和一群不同的a串,问b是那些a串的子串.
或者查找模式串在原串出现了几次.
#include <iostream> #include <cstdio> #include <cmath> #include <vector> #include <cstring> #include <string> #include <algorithm> #include <string> #include <set> #include <functional> #include <numeric> #include <sstream> #include <stack> #include <map> #include <queue> #pragma comment(linker, "/STACK:102400000,102400000") #define CL(arr, val) memset(arr, val, sizeof(arr)) #define ll long long #define inf 0x7f7f7f7f #define lc l,m,rt<<1 #define rc m + 1,r,rt<<1|1 #define pi acos(-1.0) #define L(x) (x) << 1 #define R(x) (x) << 1 | 1 #define MID(l, r) (l + r) >> 1 #define Min(x, y) (x) < (y) ? (x) : (y) #define Max(x, y) (x) < (y) ? (y) : (x) #define E(x) (1 << (x)) #define iabs(x) (x) < 0 ? -(x) : (x) #define OUT(x) printf("%I64d\n", x) #define lowbit(x) (x)&(-x) #define Read() freopen("a.txt", "r", stdin) #define Write() freopen("b.txt", "w", stdout); #define maxn 1000000000 #define N 2510 #define mod 1000000000 using namespace std; int p[10010]; char s1[10010],s2[1000010]; int n,m; void next(int m) { int j=0; p[1]=0; for(int i=2;i<=m;i++) { while(j>0&&(s1[j+1]!=s1[i])) j=p[j]; if(s1[j+1]==s1[i]) j+=1; p[i]=j; //printf("%d\n",p[i]); } } int kmp(int n) { int j=0,k=0; for(int i=1;i<=n;i++) { while(j>0&&s1[j+1]!=s2[i]) j=p[j]; if(s1[j+1]==s2[i]) j=j+1; if(j==m) { k++; j=p[j]; } //printf("%d\n",j); } return k; } int main() { // freopen("a.txt","r",stdin); int k; scanf("%d",&k); for(int i=0;i<k;i++) { scanf("%s",s1+1); scanf("%s",s2+1); m=strlen(s1+1); //printf("%d\n",m); next(m); n=strlen(s2+1); printf("%d\n",kmp(n)); } return 0; }
相关文章推荐
- hadoop集群的搭建脚本及构思(一):用户和用户权限
- Android 图片OutOfMemory异常bitmap size exceeds VM budget的原因及解决方法
- COM/DCOM开发之远程进程外组件(DCOM)
- 《大话设计模式》--OOTV杯超级模式大赛--模式总结(29-B)
- C++【多重继承和虚继承】
- java屏幕截屏
- cocostudio中的一些控件的使用
- IOS中显示和隐藏状态栏的网络活动标志
- HTML 5 服务器发送事件
- Android开发组件安全维护
- VMware Workstation虚拟网卡Vmnet0,1,8之间的关系
- 网站安全狗最新版绕过测试
- LeetCode_34---Search for a Range
- SOLUTION TO SOLVE THE ORACLE QEQUENCE
- RedHat上使用matplotlib进行科学画图
- 解决Android studio无法更新sdk的方法2
- xslt中substring 函数的用法
- 卡尔曼滤波器的介绍
- 操作系统---系统调用
- js/jQuery判断浏览器名称、内核版本、浏览器壳