HDU 2087 (KMP不可重叠的匹配) 花布条
题意:
用两个字符串分别表示布条和图案,问能从该布条上剪出多少这样的图案。
分析:
毫无疑问这也是用KMP匹配,关键是一次匹配完成后,模式串应该向后滑动多少。
和上一题 HDU 1686 不同,两个图案肯定不能在母串中有交叉的部分,所以当匹配成功一次后,应当滑动整个模式串的长度。
和上一题比,代码几乎不变,只是
j = next[j]; 变为 j = 0;
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include <cstdio> 2 #include <cstring> 3 4 const int maxn = 1000 + 10; 5 char p[maxn], q[maxn]; 6 int next[maxn]; 7 8 void get_next(char* p, int l) 9 { 10 int j = 0, k = -1; 11 next[0] = -1; 12 while(j < l) 13 { 14 if(k == -1 || p[k] == p[j]) 15 { 16 k++; 17 j++; 18 next[j] = k; 19 } 20 else k = next[k]; 21 } 22 } 23 24 int KMP(char* p, int lenp, char* q, int lenq) 25 { 26 int i = 0, j = 0, ans = 0; 27 while(i < lenp) 28 { 29 if(j == -1 || p[i] == q[j]) 30 { 31 i++; 32 j++; 33 } 34 else j = next[j]; 35 if(j == lenq) 36 { 37 ans++; 38 j = 0; 39 } 40 } 41 return ans; 42 } 43 44 int main(void) 45 { 46 //freopen("2087in.txt", "r", stdin); 47 48 while(scanf("%s", p) == 1) 49 { 50 if(p[0] == '#') break; 51 52 memset(next, 0, sizeof(next)); 53 scanf("%s", q); 54 int lenp = strlen(p); 55 int lenq = strlen(q); 56 get_next(q, lenq); 57 printf("%d\n", KMP(p, lenp, q, lenq)); 58 } 59 60 return 0; 61 }
代码君
转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4109678.html
HDU 2087 (KMP不可重叠的匹配) 花布条相关推荐
- HDU 2087 [KMP]
题目链接 思路:KMP多匹配模板题,套用模板即可 #include<iostream> #include<string> #include<string.h> #i ...
- HDU 2087 剪花布条 KMP入门
Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条.计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入 ...
- 剪花布条(HDU 2087)
[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher C - 剪花布条 题目: Description 一块花布条,里面有些图案,另有一块直接可用的小饰条, ...
- 【HDU - 2087】 剪花布条(直接模拟 or KMP)
题干: 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花 ...
- 【hdu 2087】剪花布条
今天去刷了一下前几届学长大一时的周赛题,主要收获是学了点string类的基本用法. 题目链接:传送门 剪花布条 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰 ...
- KMP算法:HDU-2087-剪花布条
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=2087 HDU-2087-剪花布条 Oil Deposits Time Limit: 1000/1000 ...
- 剪花布条(KMP入门)
剪花布条 HDU - 2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一 ...
- 2016 UESTC Training for Search Algorithm String I - 谭爷剪花布条 KMP
I - 谭爷剪花布条 Time Limit: 3000/100MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- HDUOJ 2087 剪花布条
题目链接 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Inp ...
最新文章
- PyTorch 笔记(16)— torch.nn.Sequential、torch.nn.Linear、torch.nn.RelU
- android源码的目录
- 常用js代码整理、收集
- ROS系统 通过服务编程实现两个数相加并返回
- 关于Linux的缓存内存 Cache Memory详解
- JavaEE笔记(九)
- 11g下如何查询trace文件名
- Rust:剑指C++
- linux系统下如何使用U盘、光盘、软盘?如何挂载U盘,光盘镜像?
- python 字典(dict)
- oracle 知识点
- HDU2010 水仙花数【进制+入门】
- Golang操作数据库
- 基于elasticjob的入门maven项目搭建
- 算法培训(一)---排序算法
- python绘制椭圆双曲线_奇妙一招:如何用“尺规作图”作出椭圆双曲线抛物线?...
- 苹果27寸一体机拆机图解_21.5/27寸新iMac完全拆解:维修要你命
- 阿里云大数据ACP认证学习笔记
- 解决荣耀magicbook Linux版 无线网卡驱动安装不上的问题
- python 实现表情迁移
热门文章
- android webview js交互,响应webview图片的响应事件
- 客户端使用win共享文件出错解决方法
- [图示]营销理论:不同时代的用户如何接受一个新事物?
- 在网上常听到说CEO CTO CIO CGO COO CFO什么什么..现在了解了一下..呵呵
- 【剑指offer】不使用新变量,交换两个变量的值,C++实现
- java 二进制,八进制,十进制,十六进制间相互转换的方法
- Atiti。流量提升软件设计大纲规划 v1 q45
- 将一个数组划分为和差值最小的子数组
- C#以post方式调用struts rest-plugin service的问题
- 最简单EXT调用WCF