牛客网 第十四届华中科技大学程序设计竞赛决赛同步赛 E-A Simple Problem KMP

题目链接

题意:喻园路上一共有n棵树,有k种类别,教练想回旅馆但是忘了具体在哪个位置,只记得旅馆前m棵树的种类,而且他还可能把一种种类当成另外一种。求旅馆可能所在的位置的数目。

思路:基于教练记得的序列,要找旅馆可能在的位置,其实就是在原序列中找跟记得的序列格式相同的序列数目。例如教练记得是2,9,1,2,1。那么只要在原序列长为5的子序列中找到第一个和第四个相同,第三个和第五个相同,第二个与其余都不同的即可。那么由于是找格式,只要把两个序列都转换成格式来描述,用kmp即可解决。例如(2,9,1,2,1)/(1,3,4,1,4)/(5,1,3,5,3)......这样相同格式的序列,序列中某个元素与在序列中位于它之前的与它相等的元素的差值都是一致的,若不存在则=-1。均为(-1,-1,-1,3,2)。那么我们即可通过这个操作转化,即可通过kmp解决。此外,对于原序列来说若有差值>=m的也要记为-1,或是差值不小于其当前匹配的相应的模式串的位置也要记为-1。

#include<cstdio>
#include<iostream>
#include&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值