codevs1404字符串匹配
2016-05-09 18:09
316 查看
/* 无奈我改了那么久还是看的题解 首先跑一边kmp 几下ans[p]表示总共匹配到长度p的次数 这些不一定都是恰好到p 所以在处理一下 ans[p]通过处理变成 所有的匹配到长度p的次数 最后答案就是总共匹配到长度p+1的次数 - 总共匹配到长度p的次数 就是恰好匹配到长度p的次数 */ #include<iostream> #include<cstdio> #include<cstring> #define maxn 200010 using namespace std; int l1,l2,k,s,fail[maxn],ans[maxn]; char s1[maxn],s2[maxn]; void kmp_init() { for(int i=2;i<=l2;i++) { int p=fail[i-1]; while(p&&s2[p+1]!=s2[i]) p=fail[p]; if(s2[p+1]==s2[i]) fail[i]=p+1; else p=0; } return ; } void kmp_slove() { int p=0; for(int i=1;i<=l1;i++) { while(p&&s2[p+1]!=s1[i]) p=fail[p]; if(s2[p+1]==s1[i])p++; ans[p]++; } } int main() { scanf("%d%d%d",&l1,&l2,&k); scanf("%s%s",s1+1,s2+1); kmp_init(); kmp_slove(); for(int i=l2;i>0;i--) ans[fail[i]]+=ans[i]; for(int i=0;i<l2;i++) ans[i]-=ans[i+1]; for(int i=1;i<=k;i++) { scanf("%d",&s); printf("%d\n",ans[s]); } return 0; }
相关文章推荐
- WebService 之 WSDL文件 讲解
- 1519 过路费
- 共同学习Java源代码--数据结构--AbstractList抽象类(三)
- [高精度][codevs 1145]Hanoi双塔问题
- 串口的Hex/AscII发送与显示
- 提高编程效率的习惯
- Android5.1权限问题解决
- oracle插入数据时提示视图或表不存在问题
- HDU-2089 不要62 (数位DP)
- MySQL
- 小公司的前端应该怎么做?
- 转: adroid音视延迟 10ms的原因与解答
- 去掉 sudo 安装和运行 node 模块的方法
- 第十一章 Camera笔记
- JavaScript编写点击查看大图的页面半透明遮罩层效果实例
- 关于FM1208之类的CPU卡的总结说明
- Activity之间序列化传递Object
- androidslidingmenu 在android 5.0以上手机里面navigationbar虚拟导航自动弹出布局不会自动变换的问题
- MVC设计模式
- linux命令