HDU 2087 剪花布条(KMP,不可重叠重复子串)
给KMP传的数组一定要从0开始!!
显然,我们要先把模式串放到前面,之后主串放后面,中间隔开,这样就可以根据前缀数组的性质来求了。
这题和我上一篇博客类似,只不过不可重叠,我看了数据范围不大,所以就开了vis数组存是否走过,之后就可以做到不可重叠了。
但这题还有个陷阱,就是说了ascii码内都是颜色,所以就不能用'$'来隔离了,我的操作是inp数组赋一个300,这样就超过128,之后就A了
#include <bits/stdc++.h>
using namespace std; const int INF=0x3f3f3f3f;
typedef long long ll;
#define PI(A) printf("%d\n",A)
#define SI(N) scanf("%d",&(N))
#define SII(N,M) scanf("%d%d",&(N),&(M))
#define cle(a,val) memset(a,(val),sizeof(a))
#define rep(i,b) for(int i=0;i<(b);i++)
#define Rep(i,a,b) for(int i=(a);i<=(b);i++)
#define reRep(i,a,b) for(int i=(a);i>=(b);i--)
const double EPS= 1e- ; /* ///////////////////////// C o d i n g S p a c e ///////////////////////// */ const int MAXN= + ; void kmp_pre(int x[],int m,int Next[])
{
int i,j;
j=Next[]=-;
i=;
while(i<m)
{
while(-!=j&&x[i]!=x[j])j=Next[j];
Next[++i]=++j;
}
}
int Next[MAXN],inp[MAXN];
int N,M;
char str1[+],str2[+];
bool vis[MAXN];
bool check(int x,int y)
{
for (int i=x;i<=y;i++)
{
if (vis[i]) return false;
}
return true;
}
int main()
{
while(~scanf("%s",str1))
{
N=strlen(str1);
if (N==&&str1[]=='#') break;
scanf("%s",str2);
M=strlen(str2);
str2[M]='$';//这是错的,不能符赋为$,因为题里说是任何ASCII值都是颜色
for (int i=; i<=M; i++)
{
inp[i]=str2[i];
}
for(int i=M+; i<=N+M; i++)
{
inp[i]=str1[i-M-];
}
inp[M]=;//所以这要赋一个超过ASCII值的数
kmp_pre(inp,N+M+,Next);
cle(vis,);
int ans=;
for (int i=; i<=N+M+; i++)
if(Next[i]==M&&check(i-M+,i)&&i-M+>=)
{
for (int j=i-M+;j<=i;j++)
vis[j]=;
ans++;
}
PI(ans);
}
return ;
}
HDU 2087 剪花布条(KMP,不可重叠重复子串)的更多相关文章
- HDU 2087 剪花布条 (KMP 不允许重叠的匹配)
题目链接 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Inp ...
- HDU 2087 - 剪花布条 - [KMP算法]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...
- hdu 2087剪花布条 (KMP入门 子串出现的次数和子串个数)
剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 2087 剪花布条(字符串匹配,KMP)
HDU 2087 剪花布条(字符串匹配,KMP) Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出 ...
- HDU 2087 剪花布条 (简单KMP或者暴力)
剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 2087 剪花布条【在字符串中不可重叠地寻找子串数量】
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和 ...
- HDU 2087 剪花布条 (字符串哈希)
http://acm.hdu.edu.cn/showproblem.php?pid=2087 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图 ...
- HDU 2087 剪花布条(模式串在主串中出现的次数主串中子串不可重叠)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 题意:求模式串在主串中出现的次数,与模式串匹配的子串之间不可重叠. 思路:用kmp算法解决,在匹 ...
- HDU 2087 剪花布条 KMP极其初级之入门题(KMP模板在这里)
Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input ...
- C - 剪花布条 (KMP例题)
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和 ...
随机推荐
- linux 下查看机器是cpu是几核的(转)
几个cpu more /proc/cpuinfo |grep "physical id"|uniq|wc -l 每个cpu是几核(假设cpu配置相同) more /proc/cpu ...
- Visual Studio 2012 离线升级包的制作
通过CMD执行“VS2012.3.exe/layout”命令,就可以把在线升级的文件保存到本地,这样一来,只要把下载出来的文件打包上传,然后分享出去,所谓的“VS2012 Update 3 离线升级包 ...
- 点亮LED(库函数实现)
本次测试采用的芯片是STM32F103CB 我的开发板如下: 此开发板有8个led,分别为D11,D12,D13,D14,D15,D16,D17,D18.查询核心板的电路图后知道其对应芯片的控制引脚为 ...
- 论文笔记之:Heterogeneous Image Features Integration via Multi-Modal Semi-Supervised Learning Model
Heterogeneous Image Features Integration via Multi-Modal Semi-Supervised Learning Model ICCV 2013 本文 ...
- GBG java
https://sourceware.org/gdb/onlinedocs/gdb/Sample-Session.html#Sample-Session http://m.blog.csdn.net/ ...
- 理解MySQL——复制(Replication)
1.复制概述 1.1.复制解决的问题数据复制技术有以下一些特点:(1) 数据分布(2) 负载平衡(load balancing)(3) 备份(4) 高可用性(high avai ...
- form表单回车提交问题,JS监听回车事件
我们有时候希望回车键敲在文本框(input element)里来提交表单(form),但有时候又不希望如此.比如搜索行为,希望输入完关键词之后直接按回车键立即提交表单,而有些复杂表单,可能要避免回车键 ...
- 【转】图解CSS的padding,margin,border属性(详细介绍及举例说明)
W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层.盒模型主要定义四个区域:内容(content).边框距(p ...
- Javascript 错误捕获
一.一般写JS代码很少捕获异常,建议捕获异常,具体代码如下: 1.写法一: try { //具体代码 } catch(error) { alert("Error:" + error ...
- Oralce开窗函数OVER()的一些应用
好久没用oracle了,发现很多东西已经忘记.正好今天改写个语句,顺便回忆了一下,乘热整理以备遗忘. over(order by salary) 按照salary排序进行累计,order by是个默认 ...