题意:

用两个字符串分别表示布条和图案,问能从该布条上剪出多少这样的图案。

分析:

毫无疑问这也是用KMP匹配,关键是一次匹配完成后,模式串应该向后滑动多少。

和上一题 HDU 1686 不同,两个图案肯定不能在母串中有交叉的部分,所以当匹配成功一次后,应当滑动整个模式串的长度。

和上一题比,代码几乎不变,只是

j = next[j]; 变为 j = 0;

 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不可重叠的匹配) 花布条相关推荐

  1. HDU 2087 [KMP]

    题目链接 思路:KMP多匹配模板题,套用模板即可 #include<iostream> #include<string> #include<string.h> #i ...

  2. HDU 2087 剪花布条 KMP入门

    Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条.计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入 ...

  3. 剪花布条(HDU 2087)

    [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher C - 剪花布条 题目: Description 一块花布条,里面有些图案,另有一块直接可用的小饰条, ...

  4. 【HDU - 2087】 剪花布条(直接模拟 or KMP)

    题干: 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花 ...

  5. 【hdu 2087】剪花布条

    今天去刷了一下前几届学长大一时的周赛题,主要收获是学了点string类的基本用法. 题目链接:传送门 剪花布条 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰 ...

  6. KMP算法:HDU-2087-剪花布条

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=2087 HDU-2087-剪花布条 Oil Deposits Time Limit: 1000/1000 ...

  7. 剪花布条(KMP入门)

    剪花布条 HDU - 2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?  Input输入中含有一 ...

  8. 2016 UESTC Training for Search Algorithm String I - 谭爷剪花布条 KMP

    I - 谭爷剪花布条 Time Limit: 3000/100MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit ...

  9. HDUOJ 2087 剪花布条

    题目链接 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Inp ...

最新文章

  1. PyTorch 笔记(16)— torch.nn.Sequential、torch.nn.Linear、torch.nn.RelU
  2. android源码的目录
  3. 常用js代码整理、收集
  4. ROS系统 通过服务编程实现两个数相加并返回
  5. 关于Linux的缓存内存 Cache Memory详解
  6. JavaEE笔记(九)
  7. 11g下如何查询trace文件名
  8. Rust:剑指C++
  9. linux系统下如何使用U盘、光盘、软盘?如何挂载U盘,光盘镜像?
  10. python 字典(dict)
  11. oracle 知识点
  12. HDU2010 水仙花数【进制+入门】
  13. Golang操作数据库
  14. 基于elasticjob的入门maven项目搭建
  15. 算法培训(一)---排序算法
  16. python绘制椭圆双曲线_奇妙一招:如何用“尺规作图”作出椭圆双曲线抛物线?...
  17. 苹果27寸一体机拆机图解_21.5/27寸新iMac完全拆解:维修要你命
  18. 阿里云大数据ACP认证学习笔记
  19. 解决荣耀magicbook Linux版 无线网卡驱动安装不上的问题
  20. python 实现表情迁移

热门文章

  1. android webview js交互,响应webview图片的响应事件
  2. 客户端使用win共享文件出错解决方法
  3. [图示]营销理论:不同时代的用户如何接受一个新事物?
  4. 在网上常听到说CEO CTO CIO CGO COO CFO什么什么..现在了解了一下..呵呵
  5. 【剑指offer】不使用新变量,交换两个变量的值,C++实现
  6. java 二进制,八进制,十进制,十六进制间相互转换的方法
  7. Atiti。流量提升软件设计大纲规划 v1 q45
  8. 将一个数组划分为和差值最小的子数组
  9. C#以post方式调用struts rest-plugin service的问题
  10. 最简单EXT调用WCF