剪花布条(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 ...
随机推荐
- UVA 10129-Play on Words(欧拉通路)
题意:给N个单词,判断是否单词首尾(前一个单词的尾字符与后一个单词的头字符相同)相连能否形成一条链. 解析:找欧拉通路(欧拉回路或是欧拉链路),但这题事先需要并查集一下,判断是否只属于一个集合,如aa ...
- poj 3678 Katu Puzzle(2-sat)
Description Katu Puzzle ≤ c ≤ ). One Katu ≤ Xi ≤ ) such that for each edge e(a, b) labeled by op and ...
- C# StreamReader/StreamWriter与FileStream用法详解
http://www.360doc.com/content/13/0610/08/12579422_291878973.shtml
- The 2013 South America/Brazil Regional Contest 题解
A: UVALive 6525 cid=61196#problem/A" style="color:blue; text-decoration:none">Atta ...
- apache的keepalive和keepalivetimeout
在APACHE的httpd.conf中,KeepAlive指的是保持连接活跃,类似于Mysql的永久连接.换一句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避 ...
- winform —— 常用控件
1.textbox: 属性:text: 文本selectedtext: 获或设置选中文本canundo: 是否能够撤销 passwordchar:替换字符实现密码 ...
- pl/sql连接远程服务器
1.oracle提供了instantclient,下载instantclient-basic-win32-10.2.0.4.zip,将包解压存放到本地,如:D:\STUDY\instantclient ...
- c# 面相对象2-之封装性
一.封装特性: 这是一种隐藏的特性.可以用一个公式来展示类的封装特性: 封装的类=数据 + 对此数据进行的操作(即算法) 通俗的说,封装就是:包起外界不必要知道的东西,只向外界展露可供展示的东西. ...
- lsof-列出当前系统打开文件
root@user:/ # lsof COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE ...
- windows 数据类型转换为 dotnet 数据类型
Windows Data Type .NET Data Type BOOL, BOOLEAN Boolean or Int32 BSTR String BYTE Byte CHAR Char DOUB ...