KMP模板
2016-03-10 19:02
295 查看
比赛时发现憋不出模板啦这真是伤心 只写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 {
10 scanf("%d",&T);
11 while(T--)
12 {
13 scanf("%s %s",b+1,a+1);
14 la=strlen(a+1),lb=strlen(b+1);
15
16 //to
17 int j=0; to[1]=0;
18 for(int i=2;i<=lb;i++)
19 {
20 while(j>0&&b[j+1]!=b[i]) j=to[j];
21 if(b[j+1]==b[i]) j++;
22 to[i]=j;
23 }
24
25 // 匹配
26 int ans=0; j=0;
27 for(int i=1;i<=la;i++)
28 {
29 while(j>0&&a[i]!=b[j+1]) j=to[j];
30 if(a[i]==b[j+1]) j++;
31 if(j==lb) ans++,j=to[j];
32 }
33
34 printf("%d\n",ans);
35 }
36
37 return 0;
38 }
39
贴个以前的模板 多敲几遍
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 {
10 scanf("%d",&T);
11 while(T--)
12 {
13 scanf("%s %s",b+1,a+1);
14 la=strlen(a+1),lb=strlen(b+1);
15
16 //to
17 int j=0; to[1]=0;
18 for(int i=2;i<=lb;i++)
19 {
20 while(j>0&&b[j+1]!=b[i]) j=to[j];
21 if(b[j+1]==b[i]) j++;
22 to[i]=j;
23 }
24
25 // 匹配
26 int ans=0; j=0;
27 for(int i=1;i<=la;i++)
28 {
29 while(j>0&&a[i]!=b[j+1]) j=to[j];
30 if(a[i]==b[j+1]) j++;
31 if(j==lb) ans++,j=to[j];
32 }
33
34 printf("%d\n",ans);
35 }
36
37 return 0;
38 }
39
相关文章推荐
- 【BZOJ 1877】 [SDOI2009]晨跑
- 【BZOJ 2301】 单选错位
- 【BZOJ 1415】 [Noi2005]聪聪和可可
- iOS开发 提示框- UIAlertController(是UIAlertView和UIActionSheet的合二为一)
- cocos2d-x之物理引擎之碰撞监测
- CSS盒子模型
- 【洛谷 1338】 末日的传说
- PDO中文乱码的问题
- 【洛谷 1357】 花园
- 【BZOJ 1012】 [JSOI2008]最大数maxnumber
- 【洛谷 2161】 [Shoi2009]Booking 会场预约
- 【BZOJ 1798】[Ahoi2009]Seq 维护序列seq
- 【CodeVS 1540】银河英雄传说 2002年NOI全国竞赛
- 【洛谷 1991】 无线通讯网
- 【洛谷 1345】 奶牛的电信
- 【BZOJ 3990】 [SDOI2015]排序
- 【BZOJ 2705】 [SDOI2012]Longge的问题
- 【BZOJ 1934】 [Shoi2007]Vote 善意的投票
- 【BZOJ 1433】 [ZJOI2009]假期的宿舍
- 【COGS 1873】 [国家集训队2011]happiness(吴确)