HDU2087 剪花布条 KMP模板
2016-07-25 10:58
288 查看
K - 剪花布条
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status
Description
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
Sample Input
abcde a3
aaaaaa aa
#
Sample Output
0
3
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
Submit Status
Description
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
Sample Input
abcde a3
aaaaaa aa
#
Sample Output
0
3
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; int n,m;char a[1005],b[1005],p[1005]; void find(); int kmp(); int main() { int i,j,k; while(scanf("%s",a)) { if(a[0]=='#') break; scanf("%s",b); n=strlen(a);m=strlen(b); find(); printf("%d\n",kmp()); } return 0; } void find() { int i,j=-1; p[0]=-1; for(i=1;i<m;i++) { if(j>=0 && b[j+1]!=b[i]) j=p[j]; if(b[j+1]==b[i]) j++; p[i]=j; } } int kmp() { int i,j,k,ans=0; j=-1; for(i=0;i<n;i++) { while(j>=0 && a[i]!=b[j+1]) j=p[j]; if(a[i]==b[j+1]) j++; if(j==m-1) { ans++; j=-1; } } return ans; }
相关文章推荐
- SpringMVC 与oracle数据库的交互
- 改变图片尺寸大小不改变像素
- jeasyui插件扩展datagrid-filter的改善
- SCU2016-07 T题 prim算法
- HDU 1754 I Hate It!(线段树)
- Jquery 枚举展示
- R语言与机器学习学习笔记(分类算法)(1)K-近邻算法
- hello world python redis
- LeetCode 143. Reorder List
- 吐槽iOS国际化:关于NSLocalizedString的使用
- String.format参加字符串拼接大比拼
- 通过代码关闭程序
- js和jstl标签混用,太强大了!
- java 读取excel内容转为JSONArray
- VS2013生成DLL却没有lib文件
- ubuntu: Unable to correct problems, you have held broken packages 解决方案
- 回文词
- Flip Game
- nyoj 1070 诡异的电梯【Ⅰ】 动态规划
- Arraylist 逆置,循环右移,循环左移