POJ 3461 Oulipo KMP模板题
2016-07-19 17:18
393 查看
传送门
题目大意:
第二个串中有多少个第一个串
分析:
裸KMP
在这里放一个代码
由于大家普遍字符串从0开始
而我是个有原则的人,从1开始……….>_<
所以
为了防止自己将来忘了怎么写不知道去哪里找代码
还是在这里放一段代码吧
代码如下:
by >o< neighthorn
题目大意:
第二个串中有多少个第一个串
分析:
裸KMP
在这里放一个代码
由于大家普遍字符串从0开始
而我是个有原则的人,从1开始……….>_<
所以
为了防止自己将来忘了怎么写不知道去哪里找代码
还是在这里放一段代码吧
代码如下:
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> using namespace std; const int maxn=1000000+5; int cas,lenp,lens,nxt[maxn]; char p[maxn],s[maxn]; inline void getnext(void){ int k; nxt[0]=nxt[1]=0; for(int i=1;i<lenp;i++){ k=nxt[i]; while(k&&p[k+1]!=p[i+1]) k=nxt[k]; if(p[k+1]==p[i+1]) nxt[i+1]=k+1; else nxt[i+1]=0; } } inline void kmp(void){ int ans=0,posp=1,poss=1; while(poss<=lens){ if(p[posp]==s[poss]) posp++,poss++; else if(posp==1) poss++; else posp=nxt[posp-1]+1; if(posp==lenp+1) ans++,posp=nxt[posp-1]+1; } cout<<ans<<endl; } signed main(void){ scanf("%d",&cas); while(cas--){ scanf("%s%s",p+1,s+1); lenp=strlen(p+1),lens=strlen(s+1); for(int i=1;i<=lenp;i++) nxt[i]=0; getnext(); kmp(); } return 0; }
by >o< neighthorn
相关文章推荐
- socket简介
- HP-ux AIX Linux扩展lv的方法
- C++四大类型转换
- POJ 1026 Cipher
- 今日学习
- 高级特性简介
- caffe interface --- python
- ios app的真机调试与发布配置
- cocos -js 实现计算器功能
- 解决UDT中内存下不去的问题
- HDU 5012 骰子旋转(DFS)
- AndroidStudio 与Eclipse快捷键对比
- 手工编译mysql-5.7.x全过程
- LUA学习笔记(第5-6章)
- 【笔记】《内核剖析》-01-概述
- Java JDBC的基本知识
- 杭电OJ1062 Text Reverse
- Window 下mysql binlog开启及查看,mysqlbinlog
- 《剑指offer》二叉树中和为某一值的路径
- 重置kafka的offset