KMP模板
2016-02-03 08:41
267 查看
比赛时发现憋不出模板啦
这真是伤心 只写2次的东西真心记不住
贴个以前的模板 多敲几遍
POJ 3461
1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4 using namespace std;
5 int T,la,lb;
6 char a[1000000+1],b[10000+1];
7 int to[10000+1];
8 int main()
9 {
scanf("%d",&T);
while(T--)
{
scanf("%s %s",b+1,a+1);
la=strlen(a+1),lb=strlen(b+1);
//to
int j=0; to[1]=0;
for(int i=2;i<=lb;i++)
{
while(j>0&&b[j+1]!=b[i]) j=to[j];
if(b[j+1]==b[i]) j++;
to[i]=j;
}
// 匹配
int ans=0; j=0;
for(int i=1;i<=la;i++)
{
while(j>0&&a[i]!=b[j+1]) j=to[j];
if(a[i]==b[j+1]) j++;
if(j==lb) ans++,j=to[j];
}
printf("%d\n",ans);
}
return 0;
}
这真是伤心 只写2次的东西真心记不住
贴个以前的模板 多敲几遍
POJ 3461
1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4 using namespace std;
5 int T,la,lb;
6 char a[1000000+1],b[10000+1];
7 int to[10000+1];
8 int main()
9 {
scanf("%d",&T);
while(T--)
{
scanf("%s %s",b+1,a+1);
la=strlen(a+1),lb=strlen(b+1);
//to
int j=0; to[1]=0;
for(int i=2;i<=lb;i++)
{
while(j>0&&b[j+1]!=b[i]) j=to[j];
if(b[j+1]==b[i]) j++;
to[i]=j;
}
// 匹配
int ans=0; j=0;
for(int i=1;i<=la;i++)
{
while(j>0&&a[i]!=b[j+1]) j=to[j];
if(a[i]==b[j+1]) j++;
if(j==lb) ans++,j=to[j];
}
printf("%d\n",ans);
}
return 0;
}
相关文章推荐
- Cheatsheet: 2016 01.01 ~ 01.31
- 8.9.2 嵌套分析函数
- 【Leetcode】Longest palindrome substring
- 8.9.1 动态SQL
- 8.8.2 谓语
- 8.8.1 执行计划
- Java手动创建一个内存泄漏的程序
- 数据结构图文解析之:队列详解与C++模板实现
- 8.6.1 例子:使用First_value来计算最大值
- 2016太原网络营销师郭文军剖析支付宝#集褔#的原因
- 8.6 First_value和Last_value
- 机房个人版——sqlhelp那点事
- Aqua Data Studio 查询结果中文乱码
- 8.5.2 例1:从前一行中返回一个值
- 8.5.1 语法和排序
- 每天一个linux命令(2):cd命令
- CentOS 6 时间,时区,设置修改及时间同步
- 8.4.2 细粒度窗口声明
- 8.4.1 跨越整个分区的聚合函数
- 分布式ActiveMQ集群