剪花布条(kmp)
剪花布条Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
Sample Input
abcde a3 aaaaaa aa #
Sample Output
0 3
|
题解:kmp里面就找了一次,如果一次匹配成功就结束,进行下次匹配,此处用了递归;strstr也可以做。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。.....................................................................................................
................................................................................................................................
...................................................。。。。。。。。。。。。。。。。。。。。。。
代码:
- #include<stdio.h>
- #include<string.h>
- const int MAXN=;
- char bigclo[MAXN],smaclo[MAXN];
- int next[MAXN],answer;
- void findnext(){
- int i=,j=-;
- next[i]=j;
- while(smaclo[i]){
- if(j==-||smaclo[i]==bigclo[j]){
- i++;j++;
- next[i]=j;
- }
- else j=next[j];
- }
- }
- void kmp(int x){
- int j=;
- while(bigclo[x]){
- if(j==-||bigclo[x]==smaclo[j]){
- j++;x++;
- if(!smaclo[j]){
- answer++;break;
- }
- }
- else j=next[j];
- }
- if(!smaclo[j])kmp(x);
- }
- int main(){
- while(~scanf("%s",bigclo),strcmp(bigclo,"#")){answer=;
- scanf("%s",smaclo);
- findnext();
- kmp();
- printf("%d\n",answer);
- }
- return ;
- }
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- typedef long long LL;
- #define mem(x,y) memset(x,y,sizeof(x))
- #define SI(x) scanf("%d",&x)
- #define PI(x) printf("%d",x)
- #define P_ printf(" ")
- const int INF=0x3f3f3f3f;
- const int MAXN=;
- char s[MAXN];
- char ss[MAXN];
- int p[MAXN];
- int N;
- void getp(){
- int i=,j=-;
- p[]=-;
- while(i<strlen(ss)){
- if(j==-||ss[i]==ss[j]){
- i++;j++;
- p[i]=j;
- }
- else j=p[j];
- }
- }
- void kmp(int& ans){
- getp();
- int j=,i=;
- int len=strlen(ss);
- while(i<strlen(s)){
- if(j==-||ss[j]==s[i]){
- i++;j++;
- if(j==len){
- ans++;j=;
- }
- }
- else j=p[j];
- }
- }
- int main(){
- while(scanf("%s",s),strcmp(s,"#")){
- scanf("%s",ss);
- int ans=;
- kmp(ans);
- printf("%d\n",ans);
- }
- return ;
- }
剪花布条(kmp)的更多相关文章
- HDU 2087 - 剪花布条 - [KMP算法]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...
- HDU 2087 剪花布条 (KMP 不允许重叠的匹配)
题目链接 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Inp ...
- hdu 2087剪花布条 (KMP入门 子串出现的次数和子串个数)
剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- C - 剪花布条 (KMP例题)
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和 ...
- HDU 2087 剪花布条(字符串匹配,KMP)
HDU 2087 剪花布条(字符串匹配,KMP) Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出 ...
- (KMP)剪花布条 -- hdu -- 2087
http://acm.hdu.edu.cn/showproblem.php?pid=2087 剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory ...
- HDU 2087 剪花布条 (简单KMP或者暴力)
剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 「LOJ#10043」「一本通 2.2 例 1」剪花布条 (KMP
题目描述 原题来自:HDU 2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 输入格式 输入数据 ...
- HDU-2087 剪花布条 字符串问题 KMP算法 查匹配子串
题目链接:https://cn.vjudge.net/problem/HDU-2087 题意 中文题咯 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条, ...
- 剪花布条 --HDOJ 2087
剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- 遍历父视图上的button
for (UIView * thebtn in [self.view subviews]) { if ([thebtn isKindOfClass:[UIButton class]]) { //*** ...
- 【组合数学:第一类斯特林数】【HDU3625】Examining the Rooms
Examining the Rooms Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- asp.net 后台对话框,确认跳转
Response.Write("<script>alert('不合法!'); window.location.href='" + ResolveClientUrl(&q ...
- Android Studio自定义注释模板及生成JavaDoc
刚开始学习Android,使用了Android Studio IDE.为了将来生产JavaDoc,学习一下如何自定义注释模板. . 自定义注释模板 1. 通过 File –>Settings 或 ...
- 使用react-native做一个简单的应用-04界面主框架
欢迎界面搭建完毕,我们接下来需要做的就是搭建应用程序的主体框架啦.首先我们看一下首页的截图: 从图中看到,我将首页分为了三部分:用黑色矩形表示的头部,绿色表示的内容和红色表示的底部. 下面我们需要解决 ...
- Uncaught TypeError: Object [object Object] has no method 'live'
$( selector ).live( events, data, handler ); // jQuery 1.3+$( document ).delegate( se ...
- onbeforepaste
onbeforepaste事件用法 onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').rep ...
- 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作
在Lucene对文本进行处理的过程中,可以大致分为三大部分: 1.索引文件:提取文档内容并分析,生成索引 2.搜索内容:搜索索引内容,根据搜索关键字得出搜索结果 3.分析内容:对搜索词汇进行分析,生成 ...
- Windows 下 Apache HTTP Server 安装、配置以及与 Tomcat 的整合(附图)
如果您能点开这篇文章,说明您已对熟悉Apache HTTP Server(下文用Apache简称)配置的重要性已很清楚了,本文不在赘述,直接介入正题,请往下阅读: 为便于阅读,列出文章目录: 一.Ap ...
- js如何控制css伪元素内容(before,after)
曾经遇到的问题,在对抗UC浏览器屏蔽需要把内容输出到css 伪元素中输出.有个疑问如何用js控制它.于是在segmentfault提问,如下是对问题的整理: 如何用js控制css伪类after 简单粗 ...