Luogu Link

题解 P3426(kmp)

首先求出 next\text{next}next 数组(记为 nxtinxt_inxti​)。

设 fif_ifi​ 表示印制 [1,i][1,i][1,i] 所需最小印章,gig_igi​ 表示 [1,i][1,i][1,i] 的印章最长能印多长。

可以发现 fif_ifi​ 只会有两种值:i,fnxtii,f_{nxt_i}i,fnxti​​。证明如下。

  • 如果 fi<fnxtif_i<f_{nxt_i}fi​<fnxti​​,但 [1,fi][1,f_i][1,fi​] 必然能印制完 [1,nxti][1,nxt_i][1,nxti​],则 fi≥fnxtif_i \geq f_{nxt_i}fi​≥fnxti​​ 矛盾。
  • 如果 fi>fnxtif_i > f_{nxt_i}fi​>fnxti​​ 且 fi≠if_i \neq ifi​​=i,因为在同一位置上印不同字符是不允许的,所以必然 [1,fi][1,f_i][1,fi​] 是 [1,i][1,i][1,i] 的后缀,也是前缀,所以可以用 fif_ifi​ 更新 nxtinxt_inxti​ 的值,矛盾。
  • 如果 fi>if_i > ifi​>i,显然不成立。

接下来考虑什么时候 fif_ifi​ 能取到 fnxtif_{nxt_i}fnxti​​:考虑 gnxtig_{nxt_i}gnxti​​,若 gnxti≥i−nxtig_{nxt_i}\geq i-nxt_ignxti​​≥i−nxti​,则 fif_ifi​ 能取到 fnxtif_{nxt_i}fnxti​​。在计算完 fif_ifi​ 的时候更新 gfig_{f_i}gfi​​ 为 iii 即可。

//P3426
#include <cstring>
#include <cstdio>const int N = 5e5 + 10;
int n, nxt[N], f[N], g[N];
char s[N];int main(){scanf("%s", s+1);n = strlen(s+1);for(int i = 2, j = 0; i <= n; ++ i){while(j > 0 && s[i] != s[j+1]) j = nxt[j];if(s[i] == s[j+1]) ++ j;nxt[i] = j;}for(int i = 1; i <= n; ++ i){if(g[f[nxt[i]]] >= i-nxt[i]) f[i] = f[nxt[i]];else f[i] = i;g[f[i]] = i;}printf("%d\n", f[n]);return 0;
}

题解 [LuoguP3426][POI2005]SZA-Template相关推荐

  1. 【题解】[POI2005] SZA-Template

    题意 给你一个长度为 n 的字符串,求印章长度的最小值,这个印章可以重复印刷同一个位置,但是每次必须恰好把所有字母都印到纸上.n<=5e5. Solution: 考点:字符串匹配. 以为是水题, ...

  2. 洛谷P3426 [POI2005]SZA-Template 题解

    洛谷P3426 [POI2005]SZA-Template 题解 题目链接:P3426 [POI2005]SZA-Template 题意:你打算在纸上印一串字母. 为了完成这项工作,你决定刻一个印章. ...

  3. 2016-2017 ACM-ICPC CHINA-Final(EC-final) 题解(10 / 12)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2016-2017 ACM-ICPC CHINA-Final 比赛链接:https://codefor ...

  4. 2017-2018 ACM-ICPC Asia East Continent League Final (ECL-Final) 题解(10 / 13)

    2017-2018 ACM-ICPC Asia East Continent League Final (ECL-Final) 9题金 6题银 5题铜 题目比较简单,但是读题太难了- 比赛链接:htt ...

  5. 解题报告(二)多项式问题(多项式乘法及其各种运算)(ACM/ OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  6. Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...

  7. Wannafly挑战赛29题解

    这套题目非常有意思啊23333--话说为啥没有上条先生的呢-- 传送门 \(A\) 御坂美琴 蠢了--首先先判总共加起来等不等于\(n\),不是的话就不行 然后dfs记录\(n\)不断分下去能分成哪些 ...

  8. 【codeforces】【比赛题解】#849 CF Round #431 (Div.2)

    cf的比赛越来越有难度了--至少我做起来是这样. 先看看题目吧:点我. 这次比赛是北京时间21:35开始的,算是比较良心. [A]奇数与结束 "奇数从哪里开始,又在哪里结束?梦想从何处起航, ...

  9. Codeforces 773D Perishable Roads 最短路 (看题解)

    Perishable Roads 智商题, 不会啊.. 贴个官方题解 https://codeforces.com/blog/entry/51883 #include<bits/stdc++.h ...

最新文章

  1. [转]开发网路游戏的延迟处理方法,广播
  2. 用这种方式,我每次都是朋友圈里第一个预见AI科技趋势的人
  3. SQL 语句快速参考
  4. Discuz! $_DCACHE数组变量覆盖漏洞
  5. 买卖股票的最好时机二Python解法
  6. 信道容量受哪三个要素_影响信道容量的主要因素有哪些
  7. 图像去模糊代码 python_用Keras搭建GAN:图像去模糊中的应用(附代码)
  8. 云小课 | DSC之数据水印,防止数据被盗用
  9. Monto Carlo估计动作价值(action values)
  10. Android Studio中XML注释错误问题
  11. 【洞察】152号令,重量级行业信息技术法规
  12. MATLAB 函数画图
  13. Python基础语法知识2
  14. 天然气压缩因子计算软件_为什么测量天然气选择气体涡轮流量计?
  15. Python游戏——Pong
  16. 什么是工作分解结构?What Work Breakdown Structure?
  17. Xib中设置view的BorderColor 及 ShadowColor
  18. 七张图总结了我的2021年,心依然热,情依然真----感谢2021年的自己,感谢CSDN
  19. 重邮2019计算机复试准备工作相关
  20. Ubuntu安装.md阅读工具-Typora

热门文章

  1. php网页在iis里打不开,asp的网站在iis上打不开
  2. Percona监控数据库解决方案
  3. 水滴筹创始人:除中国以外不推行996;字节跳动2021年净亏损6041亿!
  4. 解决 Successfully created project '' on GitHub, but initial push failed: Could not read from remote
  5. 红楼梦人物出场顺序python_Python 中文词频分析——红楼梦人物出场次数
  6. 详解 PerformanceResourceTiming API,咦,这货真的干!
  7. JavaScript 进阶 - 第2天
  8. 拼多多笔试题 回合制角色扮演
  9. 标准化考场时钟系统方案
  10. 在CorelDRAW 2019创建对称绘图模式