Problem Description
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
 
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
 
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
 
Sample Input

abcde a3aaaaaa aa#
 
Sample Output

03
 

题目分析:刚刚学了KMP,把模板贴在这里吧。。注意输入输出

#include<bits/stdc++.h>

int next[1000 + 10];

void get_next(char b[]){//b自己对自己的匹配,next[i]表示模式串b在0~i-1位的子串的最长公共前缀后缀的长度。
int i = 0, j = -1;
next[0] = -1;
while(i < strlen(b)){
while(j != -1 && b[i] != b[j]) j = next[j];
next[++i] = ++j;
} } void kmp(char a[], char b[]){//由i遍历主串,j遍历模式串,i一直走下去,j回档,复杂度O(m+n)
int i = 0, j = 0;
int ans = 0;
int n = strlen(a);
int m = strlen(b);//提前写俩变量 m n ,而不是在下面循环的地方疯狂写strlen,不然每次都要算一遍效率低
while(i < n){
while(j != -1 && a[i] != b[j]) j = next[j];
i++; j++;
if(j==m) {
ans++; //用于计算匹配的串的个数,
//printf("%d ", i-strlen(b));//输出匹配的位置
j = next[j];//这一句很重要 ,即使匹配成功也要回到next[j]而不是0
}
}
printf("%d\n", ans); }
int main(){
char a[1000 + 10], b[1000 + 10];
while(scanf("%s", a) ){
if(a[0] == '#') break;
scanf("%s", b);
get_next(b);
//for(int i = 0 ; i < strlen(b); i++)printf("%d ",next[i]);
kmp(a,b);
}
return 0;
}

HDU 2087 剪花布条 KMP极其初级之入门题(KMP模板在这里)的更多相关文章

  1. hdu 2087 剪花布条 KMP多次匹配

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

  2. HDU——2087剪花布条

    剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. 题解报告:hdu 2087 剪花布条(KMP入门)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面 ...

  4. HDU 2087 剪花布条 KMP入门

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

  5. 【HDU 2087 剪花布条】

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  6. HDOJ/HDU 2087 剪花布条(indexOf()应用~~)

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

  7. HDU 2087 剪花布条 KMP

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2087 KMP匹配数—— AC代码: #include <iostream> #includ ...

  8. HDU 2087 剪花布条(KMP,不可重叠重复子串)

    给KMP传的数组一定要从0开始!! 显然,我们要先把模式串放到前面,之后主串放后面,中间隔开,这样就可以根据前缀数组的性质来求了. 这题和我上一篇博客类似,只不过不可重叠,我看了数据范围不大,所以就开 ...

  9. hdu 2087 剪花布条 kmp模板题

    也是kuangbin专题的 专题名字太长 不复制了…… 刚好数据结构也学了kmp 找一道题敲敲模板…… 暴力的字符串匹配是O(n*m)的时间复杂度 而kmp通过一个O(m)的预处理将字符串匹配的时间复 ...

随机推荐

  1. 【一起学源码-微服务】Ribbon源码五:Ribbon源码解读汇总篇~

    前言 想说的话 [一起学源码-微服务-Ribbon]专栏到这里就已经全部结束了,共更新四篇文章. Ribbon比较小巧,这里是直接 读的spring cloud 内嵌封装的版本,里面的各种config ...

  2. kmp算法初步理解

    123456789 abbdaxnds Next   01212 第三位看第二位b,第二位和第三位相同,都是b,所以第三位的next是第二位的next加1,即1+1=2 第四位看第三位b,第四位d与第 ...

  3. 深入理解协程(二):yield from实现异步协程

    原创不易,转载请联系作者 深入理解协程分为三部分进行讲解: 协程的引入 yield from实现异步协程 async/await实现异步协程 本篇为深入理解协程系列文章的第二篇. yield from ...

  4. SharePoint REST 上传文件请求403错误

    最近,需要在SharePoint上传文件到文档库,但是,上传的过程报错了. 错误代码 { "error": { "code": "-213057525 ...

  5. dfs - 概率

    C. Journey time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  6. JDK 和JRE区别

    JDK,开发java程序用的开发包,JDK里面有java的运行环境(JRE),包括client和server端的.需要配置环境变量.... JRE,运行java程序的环境,JVM,JRE里面只有cli ...

  7. python爬虫——scrapy的使用

    本文中的知识点: 安装scrapy scrapy的基础教程 scrapy使用代理 安装scrapy 由于小哥的系统是win7,所以以下的演示是基于windows系统.linux系统的话,其实命令都一样 ...

  8. Oracle v_$和v$的解释

    以v_$mystat和v$mystat具体说明 grant语句中使用的v_$mystat和test用户访问的v$mystat不一样 这里说一下 v$mystat 和 v_$mystat 的区别 初始状 ...

  9. Centos 7安装 Mysql

    Mysql数据库的安装与配置 CentOS7的yum源中默认好像是没有mysql的,所有我们采用从官方下载的方式进行安装. 为了节省时间,下面的步骤参考网络上的教程,根据最新情况进行了修改. ①卸载M ...

  10. MySQL——DOS命令

    翻开之前的笔记发现有这么一篇,于是整理了一下发出来加深记忆并分享交流,欢迎纠错,谢谢!!! 1.启动MySQL服务: net start mysql; 2.停止MySQL服务: net stop my ...