首先是KMP介绍:

主串:a b a c a a b a c a b a c a b a a b b,下文中我们称作T
模式串:a b a c a b,下文中我们称作W
在暴力字符串匹配过程中,我们会从T[0] 跟 W[0] 匹配,如果相等则匹配下一个字符,直到出现不相等的情况,此时我们会简单的丢弃前面的匹配信息,然后从T[1] 跟 W[0]匹配,循环进行,直到主串结束,或者出现匹配的情况。这种简单的丢弃前面的匹配信息,造成了极大的浪费和低下的匹配效率。
然而,在KMP算法中,对于每一个模式串我们会事先计算出模式串的内部匹配信息,在匹配失败时最大的移动模式串,以减少匹配次数。
比如,在简单的一次匹配失败后,我们会想将模式串尽量的右移和主串进行匹配。右移的距离在KMP算法中是如此计算的:在已经匹配的模式串子串中,找出最长的相同的前缀和后缀,然后移动使它们重叠。
在第一次匹配过程中
T: a b a c a a b a c a b a c a b a a b b
W: a b a c ab
在T[5]与W[5]出现了不匹配,而T[0]~T[4]是匹配的,现在T[0]~T[4]就是上文中说的已经匹配的模式串子串,现在移动找出最长的相同的前缀和后缀并使他们重叠:
T: a b a c aab a c a b a c a b a a b b
W: a b a c ab
然后在从上次匹配失败的地方进行匹配,这样就减少了匹配次数,增加了效率。

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4552

题目描述:

“在树最美丽的那天,当时间老人再次把大钟平均分开时,我会降临在灯火之城的金字塔前,带走那最珍贵的笑容。”这是怪盗基德盗取巴黎卢浮宫的《蒙娜丽莎的微笑》这幅画时,挑战书上的内容。
  但这次,怪盗基德的挑战书上出现了一串串小写字母“aaab sdfeeddd...”。柯南以小学生的眼睛,超凡高中生的头脑,快速统计各种字母频率,字符串长度,并结合挑战书出现的时间等信息,试图分析怪盗基德的意图。最后,他将线索锁定在字符串的循环次数上。并且进一步推理发现,从字符串的第一位开始,到第i位,形成该字符串的子串(c1, c2, c3 ... ci )。对于某一子串ci在该字符串中出现的次数记为ki,则全部子串的循环次数总和AIM = k1 + k2 + ... + ki + ... + kn,柯南发现,AIM恰好对应一个ASCII码!所以,只要把挑战书上的字符串转变成数字,再找到对应的ASCII码,就可以破解这份挑战书了!
  现在,你的任务就是把字符串转变成对应数字,因为ASCII码以及扩展ASCII码全部只有256个,所以,本题只要把结果对256取余即可。

解题思路:

运用KMP的思想,相当于s与自身若干个字串做kmp~

#include<stdio.h>
#include<string.h>
int main()
{int n,m,i,j,t,sum;int max;char s[100010];while(gets(s)){n=strlen(s);sum=0;for(i=0;i<n;i++){for(j=0,t=i;j<n;j++,t++){if(s[j]!=s[t])break;}sum+=j;}printf("%d\n",sum%256);}return 0;
}

KMP——怪盗基德的挑战书(hdu4552)相关推荐

  1. HDU4552 怪盗基德的挑战书【文本处理】

    怪盗基德的挑战书 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  2. HDU - 4552 怪盗基德的挑战书(后缀数组+RMQ/KMP+dp)

    题目链接:点击查看 题目大意:给出一个字符串,统计每个前缀在字符串中出现的次数之和 题目分析:可以直接先用后缀数组跑出来height,再用RMQ跑出来任意两个后缀的height,我们可以将题意转换为求 ...

  3. java sqlexception_Java报SQLException

    远程连接服务器for Linux 远程连接Linux云服务器-命令行模式 1.远程连接工具.目前Linux远程连接工具有很多种,您可以选择顺手的工具使用.下面使用的是名为Putty的Linux远程连接 ...

  4. kmp求前缀和后缀的最大重复部分

    hdu 2594 kmp水题 求s1的前缀和s2的后缀重复度的最大值 2013-06-05 11:16 1199人阅读 评论(0) 收藏 举报  分类: KMP(8)  版权声明:本文为博主原创文章, ...

  5. BF算法优化-------KMP算法

    百度百科:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用 ...

  6. MUV LUV EXTRA 2019CCPC秦皇岛站J题 KMP

    题目链接 题意:意思给你俩数一个字符串,然后让你对字符串小数点后边的字符串进行处理,找个一个循环节以及对应出现的长度, 然后用a*p-b*l算得到一个最大值 那肯定循环节就想到了KMP了,然后循环长度 ...

  7. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  8. 字符串匹配算法 -- BM(Boyer-Moore) 和 KMP(Knuth-Morris-Pratt)详细设计及实现

    文章目录 1. 算法背景 2. BM(Boyer-Moore)算法 2.1 坏字符规则(bad character rule) 2.2 好后缀规则(good suffix shift) 2.3 复杂度 ...

  9. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

最新文章

  1. 一小时Thinkphp后台(2)
  2. 计算机语言编程能力有哪些,除了编程语言,程序员还需要具备哪些能力
  3. MySQL8索引篇:性能提升了100%!!
  4. Jenkins入门总结
  5. 开启虚拟化技术之旅---1什么是虚拟化?
  6. 无法下载linux系统的驱动精灵,有没有LINUX版的 驱动精灵 破系统搞驱动太费劲,尤其笔记本电脑...
  7. 论逗逼的自我修养——BZOJ第一页计划
  8. 这样写交互说明,开发不会约你去爬山~
  9. W3C近期要闻:W3C战略重点报告新版发布
  10. linux 命令行 浏览器_3个用于Linux命令行的Web浏览器
  11. jsmind 线条_jsMind思维导图模式数据展示
  12. 京东VS淘宝:待付款订单-再次支付方案对比
  13. GAEfan qiang教程
  14. jQuery概述(查阅菜鸟教程随笔)
  15. CSS-margin外边距
  16. java设计模式有哪些(java设计模式刘伟课后答案)
  17. mac系统下不用u盘怎么装win7系统
  18. vue中递归组件实现多级列表
  19. ubuntu 20.04 调节屏幕亮度
  20. HTML5支持服务器发送事件

热门文章

  1. 23 FI配置-财务会计-未清和关账过账期间
  2. 用户权限 英文_伴鱼绘本终身VIP卡+自然拼读精品课,完课返461元!英文原版绘本...
  3. 以独占方式锁定此配置文件失败.另一个正在运行_加速用例执行最有效的方法,手把手教你如何并行地运行自动化测试...
  4. rabbitmq报错:PRECONDITION_FAILED - parameters for queue ‘test-1‘ in vhost ‘/‘ not equivalent
  5. 软件定义存储的特征及如何工作
  6. 1.4 为什么深度学习会兴起?(Why is Deep Learning taking off?)
  7. android view过度动画,为View的切换添加过渡动画
  8. idea maven plugins报红_Maven引入本地依赖
  9. SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation要点
  10. python3 音乐播放器_Python3——MP3播放器