hdu 2087 剪花布条 (KMP)
来源:互联网 发布:石家庄seo博客 编辑:程序博客网 时间:2024/06/04 21:07
剪花布条
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 21303 Accepted Submission(s): 13313
Problem Description
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
Sample Input
abcde a3aaaaaa aa#
Sample Output
03
Author
qianneng
Source
冬练三九之二
Recommend
lcy
思路:这题需要对KMP的匹配有一定的理解,只要匹配完了之后再从模板串的开头从新匹配就行了。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define MAX_N 1005using namespace std;char t[MAX_N],p[MAX_N];int ne[MAX_N];void makeNext(const char p[],int ne[]){ int len=strlen(p); ne[0]=0; for(int i=1,k=0;i<len;i++) { while(k>0&&p[i]!=p[k]) k=ne[k-1]; if(p[i]==p[k]) k++; ne[i]=k; }}int kmp(const char t[],const char p[],int ne[]){ int n=strlen(t),m=strlen(p),ans=0; makeNext(p,ne); for(int i=0,k=0;i<n;i++) { while(k>0&&t[i]!=p[k]) k=ne[k-1]; if(t[i]==p[k]) k++; if(k==m) { ans++; k=0; } } return ans;}int main(){ while(~scanf("%s",t)) { if(t[0]=='#') break; scanf("%s",p); printf("%d\n",kmp(t,p,ne)); } return 0;}
阅读全文
0 0
- HDU 2087 剪花布条 kmp
- HDU 2087 剪花布条(KMP)
- HDU 2087 剪花布条 KMP
- hdu 2087 剪花布条(KMP)
- HDU 2087 剪花布条 裸KMP
- HDU 2087 剪花布条 KMP
- hdu 2087 剪花布条(KMP)
- HDU 2087 剪花布条(KMP)
- HDU 2087 剪花布条(KMP:贪心)
- HDU-2087 剪花布条(kmp)
- HDU 2087 剪花布条 KMP入门
- HDU 2087 剪花布条 //简单kmp
- hdu 2087 剪花布条 KMP
- HDU 2087 剪花布条 KMP题解
- hdu 2087 剪花布条(数据结构:KMP)
- hdu 2087 剪花布条 KMP
- HDU - 2087 剪花布条 (KMP)
- hdu 2087 剪花布条 KMP
- OpenFace人脸分类器训练
- WIN7的系统,不小心改变了软件的打开方式,桌面上所有图标都变成了windows播放器
- MyBatis的if判断之并且和或者
- HDU
- 八大Linux版本
- hdu 2087 剪花布条 (KMP)
- 大数据学习笔记:YARN框架分析之事件的分发与状态机
- Building workspace has encountered a problem. Errors during build.
- MySQL命令行导出数据库
- linux下的查找命令
- LeetCode 96 Unique Binary Search Tree(Python详解及实现)
- flexbox布局实例
- HDU 4786
- 查看Linux系统是否使用RAID阵列信息