poj 3461 KMP
来源:互联网 发布:tbc数据库 编辑:程序博客网 时间:2024/05/16 03:18
题意:输入案例次数,每一次的案例输入两个字符串,求第一个字符串在第二个字符串里出现了几次。
思路:KMP 稍作改动可以AC
#include<iostream>using namespace std;char W[10005];int next[10005];char T[1000005];int len1,len2;int step;void get_next(){ int j=0,k=-1; next[0]=-1; while(j<len1) { if(k==-1||W[k]==W[j]) { next[j+1]=k+1; j++;k++; } else k=next[k]; }}int kmp(){ int i=0,j=0; while(i<=len2)//一等要带“=”,如果 abcd abcd 那么就会输出0 ,因为j==len1的情况不会出现 { if(j==len1) {j=next[j];step++;}//如果扫到模式串的末尾,假设失配,那么j=next[j],改成j=0会WA //如果扫描到模式串串尾 //记录个数,因为next数组可以记录到模式串 //最后一个位置的下一个位置 例如AZA AZAZAZA //AZA next -1 0 0 1 当AZA 统计完之后,模式串退到1 //如果退到0 那么AZAZAZA中的第二个"AZA"就记录不到 if(j==-1||W[j]==T[i]) { //printf("%d %d\n",i,j); //system("pause"); j++;i++; } else j=next[j]; } return 0;}int main(){ int t; scanf("%d",&t); while(t--) { step=0; scanf("%s%s",W,T); len1=strlen(W); len2=strlen(T); get_next(); //for(int i=0;i<len1;i++) //printf("%d ",next[i]); //printf("\n"); kmp(); printf("%d\n",step); } }
- 【KMP模板】POJ 3461
- poj 3461 KMP
- poj 3461 Oulipo(KMP)
- kmp poj 3450 3461
- POJ 3461 KMP
- POJ 3461 kmp
- POJ 3461 Oulipo(KMP)
- poj 3461 kmp
- POJ 3461 Oulipo---kmp
- POJ 3461 Oulipo KMP
- poj 3461 Oulipo (KMP)
- POJ 3461 Oulipo ( KMP )
- POJ 3461 裸KMP
- 【POJ 3461 KMP】
- KMP poj 3461
- kmp poj 3461
- POJ 3461 Oulipo KMP
- POJ 3461 Oulipo / KMP
- hdu 1198 dfs(还是水坑变型题)农田灌溉
- poj 2406 KMP应用
- hdu 1358 KMP
- hdu 1711 裸KMP
- hdu 2752 KMP(前后缀)
- poj 3461 KMP
- poj 3080 KMP+暴力
- poj 3450 KMP+暴力枚举(类似于3080)
- 组织行为学笔记:第十五章 组织中的个人
- 介绍一个可玩性蛮高的东西-路由器(附RG100AA-A的一点资料)
- 大三期末总结
- 【有上下界的网络流】
- Delphi XE Refactor重构功能简单说明
- 将资源文件转换为头文件嵌入到工程