剪花布条 kmp
来源:互联网 发布:数据库概论第5版答案 编辑:程序博客网 时间:2024/05/17 01:35
Description
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
Sample Input
abcde a3
aaaaaa aa
#
Sample Output
0
3
Hint
题意
题解:
AC代码
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 1e3+10;char st[MAXN];char st2[MAXN];int nxt[MAXN];int cnt = 0;void kmp(int l1,int l2){ int i = 0,j = 0; while (i<l1){ if (j == -1 || st[i] == st2[j]){ ++i;++j; if (j == l2) cnt++,j = 0; }else j = nxt[j]; }}void getnext(int m){ int i = 0,j = 0; nxt[0] = -1;j = nxt[0]; while (i < m){ if (j == -1 || st[i] == st[j]){ nxt[++i] = ++j; }else j = nxt[j]; }}int main(){ while (scanf(" %c",&st[0])&&st[0]!='#'){ memset(nxt,0,sizeof(nxt)); cnt = 0; scanf("%s",st+1); scanf("%s",st2); //puts(st);puts(st2); int le1 = strlen(st); int le2 = strlen(st2); getnext(le2); kmp(le1,le2); printf("%d\n",cnt); } return 0;}
阅读全文
0 0
- 剪花布条 KMP
- 剪花布条 kmp
- 剪花布条(KMP)
- 2087 剪花布条【kmp】
- HDOJ2087 剪花布条(kmp)
- 剪花布条 (HDU_2087) KMP
- hdu2087 剪花布条--KMP
- HDU2087 剪花布条 [KMP]
- hdu2087 剪花布条 KMP
- hdu2087 剪花布条 kmp
- hdu2087剪花布条[KMP]
- hdu2087 剪花布条【kmp】
- HDU2087--剪花布条 (KMP)
- 剪花布条 (KMP)
- HDOJ 2087 剪花布条 [KMP]
- HDOJ 2087 剪花布条【KMP】
- HDU 2087 剪花布条 kmp
- HDU2087-剪花布条(KMP算法)
- SVN 踩坑
- 对称的二叉树
- 矩阵乘法
- 大力stl——P2202 [USACO13JAN]方块重叠Square Overlap
- js自动缩放
- 剪花布条 kmp
- jQuery给动态添加的元素绑定事件的方法
- 快速成型 Axure RP使用实例
- Hadoop的开发环境搭建
- python3-文件读写练习:计算学生总成绩
- STM32Cube + Sublime + Keil使用技巧 更新ing
- Java线程-7:线程的调度-休眠
- HDU 6122
- ReactiveCocoa v2.5 源码解析之架构总览