网站大量收购独家精品文档,联系QQ:2885784924

4.4知识精炼(二)高清版本.pdf

4.4知识精炼(二)高清版本.pdf

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

知识精炼(二)

主讲人:邓哲也

HDU4763ThemeSection

给你一个字符串S。

请你把这个S划分成EAEBE的形式。

其中A和B可以包含任意个(可以是0个)字符。

求E的最大长度。

字符串的长度之和不会超过106

HDU4763ThemeSection

观察EAEBE。

首先要保证E既是S的前缀又是S的后缀。

且去除掉前缀E和后缀E之后,中间剩下的还要出现一次E。

对S跑一次扩展KMP中的Z算法。

如果i+Z[i]-1==n,就说明S[i..n]可以作为E。

那么就要求在S[Z[i]+1..i-Z[i]]中,还得存在一个j满足Z[j]≥Z[i]

HDU4763ThemeSection

问题变成了先找i+Z[i]-1=n的i

然后在[Z[i]+1..i-Z[i]]中,查询Z的最大值,如果比

Z[i]大,那么就可以把Z[i]作为答案。

最后取最大值即可。

查询区间最大值我们可以用线段树/ST表来维护。

最后的时间复杂度都是O(nlogn)

HDU6153ASecret

给定两个字符串S和T。对于T的每个后缀,L[i]表示

后缀的长度,N[i]表示这个后缀在S中出现的次数。

求∑L[i]N[i]

|S|,|T|≤106

例如S=abababab,T=aba

答案=3*3+3*2+4*1=19

HDU6153ASecret

把T反转一下,这样后缀就变成了前缀。

如何求T的每个前缀在S中出现了几次?

运用extend数组来帮忙。

比如extend[i]=4

说明S[i..i+3]=T[1..4],那么T的前四个前缀出现的

次数就都会加一。

因此每次只要对[1,extend[i]]这个区间加一即可。

HDU6153ASecret

这道题求的是∑L[i]N[i]

因此我们可以算出次数再最后统计乘积之和。

也可以对于extend[i],直接把1+2+3+…+extend[i]计入

答案。

时间复杂度O(n)

下节课再见

文档评论(0)

133****9720 + 关注
实名认证
内容提供者

物业管理师证持证人

该用户很懒,什么也没介绍

领域认证该用户于2023年04月23日上传了物业管理师证

1亿VIP精品文档

相关文档