洛谷P3426 [POI2005]SZA-Template 题解

题目链接:P3426 [POI2005]SZA-Template

题意:你打算在纸上印一串字母。

为了完成这项工作,你决定刻一个印章。印章每使用一次,就会将印章上的所有字母印到纸上。

同一个位置的相同字符可以印多次。例如:用 aba 这个印章可以完成印制 ababa 的工作(中间的 a 被印了两次)。但是,因为印上去的东西不能被抹掉,在同一位置上印不同字符是不允许的。例如:用 aba 这个印章不可以完成印制 abcba 的工作。

因为刻印章是一个不太容易的工作,你希望印章的字符串长度尽可能小。

输入一个长度不超过 5×1055 \times 10^55×105 的非空字符串(只包含小写字母),代表要在纸上印的字符。

因为印章可以随便印,也就是无所谓什么顺序和数量

所以我们可以考虑什么样的情况可以继续

观察样例

ababbababbabababbabababbababbaba
ababbabaababbabaababbabaababbabaababbaba

最前面的ababbababbaba十分有趣

可以发现最左侧的一定是要印一次的(废话)

而重复印刷的显然和kmp的border有关

注:对字符串 sss 和 0≤r<∣s∣0 \le r < |s|0≤r<∣s∣ ,

若 sss 长度为 rrr 的前缀和长度为 rrr 的后缀相等,就称 sss 长度为 rrr 的前缀是 sss 的 border。

摘自oi-wiki

考虑先求出border,然后用dp来推

设 fif_ifi​ 表示印刷 sss 的第 iii 个前缀的最小印章长度

上界为 fi=if_i=ifi​=i

这里 fif_ifi​ 在一定条件下是可以从 faili\text{fail}_ifaili​ 转移的
fi={ffaili,∃j≥i−faili,fj=ffaili,i,default.f_i = \begin{cases} f_{\text{fail}_i},& \exist\, j \ge i-\text{fail}_i,f_j = f_{\text{fail}_i}, \\\\i,&\text{default.} \end{cases} fi​=⎩⎪⎨⎪⎧​ffaili​​,i,​∃j≥i−faili​,fj​=ffaili​​,default.​
第一个看上去复杂,

其实就是 ababbababbaba这样border有重叠的情况

用个桶维护即可,然后转移一下就好了

时间复杂度 O(n)O(n)O(n)

代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iomanip>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define N (int)(5e5+15)
char s[N];
int n,fail[N],f[N],h[N];
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);// freopen("check.in","r",stdin);// freopen("check.out","w",stdout);cin >> (s+1); n=strlen(s+1);for(int i=2,j=0; i<=n; i++){while(j&&s[i]!=s[j+1])j=fail[j];if(s[i]==s[j+1])++j;fail[i]=j;}f[1]=1;h[1]=1;for(int i=2; i<=n; i++){f[i]=i;if(h[f[fail[i]]]>=i-fail[i])f[i]=f[fail[i]];h[f[i]]=i;}cout << f[n] << '\n';return 0;
}

转载请说明出处

洛谷P3426 [POI2005]SZA-Template 题解相关推荐

  1. 洛谷 P3426 [POI2005]SZA-Template

    括弧,这是一个错误的做法,并不能AC 题目描述 Byteasar wants to put a rather long pattern on his house. In order to do thi ...

  2. 洛谷P1129 [ZJOI2007] 矩阵游戏 题解

    洛谷P1129 [ZJOI2007] 矩阵游戏 题解 题目链接:P1129 [ZJOI2007] 矩阵游戏 题意:给定一张有黑白棋子的正方形棋盘,问存不存在解法使得经过若干次交换行或列的操作后,左上角 ...

  3. 洛谷P3336 [ZJOI2013]话旧 题解

    洛谷P3336 [ZJOI2013]话旧 题解 题目链接:P3336 [ZJOI2013]话旧 题意:小林跟着银河队选手去了一趟宇宙比赛,耳濡目染,变得学术起来.回来后,他发现世界大变样了.比丘兽究级 ...

  4. 洛谷P1462 通往奥格瑞玛的道路 题解

    洛谷P1462 通往奥格瑞玛的道路 题解 题目链接:P1462 通往奥格瑞玛的道路 题意:在艾泽拉斯,有 nnn 个城市.编号为 1,2,3,-,n1,2,3,\ldots,n1,2,3,-,n . ...

  5. 洛谷P4113 [HEOI2012]采花 题解

    洛谷P4113 [HEOI2012]采花 题解 题目链接:P4113 [HEOI2012]采花 题意:萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园 ...

  6. 洛谷P4683 [IOI2008] Type Printer 题解

    洛谷P4683 [IOI2008] Type Printer 题解 题目链接:P4683 [IOI2008] Type Printer 题意: 你需要利用一台可移动的打印机打印出NNN个单词.这种可移 ...

  7. 洛谷P3647 [APIO2014] 连珠线 题解

    洛谷P3647 [APIO2014] 连珠线 题解 题目链接:P3647 [APIO2014] 连珠线 题意: 在达芬奇时代,有一个流行的儿童游戏称为连珠线.当然,这个游戏是关于珠子和线的.线是红色或 ...

  8. 洛谷P4170 [CQOI2007]涂色 题解

    洛谷P4170 [CQOI2007]涂色 题解 题目链接:P4170 [CQOI2007]涂色 题意: 假设你有一条长度为 555 的木板,初始时没有涂过任何颜色.你希望把它的 555 个单位长度分别 ...

  9. 洛谷P1868 饥饿的奶牛 题解

    洛谷P1868 饥饿的奶牛 题解 题目链接:P1868 饥饿的奶牛 题意: 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有 NNN 个区间,每个区 ...

最新文章

  1. 达梦数据库导入oracle数据_Java项目,从Oracle迁移到达梦数据库笔记
  2. 关于Angular Component changeDetection策略设置成OnPush的一个单元测试局限性
  3. android 半浮层框架,GitHub - Jodragon/AnyLayer: Android稳定高效的浮层创建管理框架
  4. java中容易被忽视的基本概念
  5. gulp学习笔记,基本使用流程,基本函数,使用监听、插件
  6. 小米12系列或首发骁龙898旗舰芯:三星4nm工艺
  7. ldd3笔记_2_加载模块方法, 模块程序组成【ZT】
  8. 量子计算机迷宫,工程杰作诞生可编程的光学量子计算机
  9. Gym 101775 D (思维)
  10. java2实用教程第五版耿祥义电子版_Java2实用教程(第5版)答案_耿祥义
  11. yyuc php,YYUC框架与YYUC手册资料下载 | 无名
  12. Sqli-Lab实验环境搭建(phpstudy环境安装、火狐浏览器插件安装、sqlmap安装、Sqli-Lab安装)
  13. 正确的座机号码格式_正确的填写手机号码的格式是什么?
  14. 数据中台与数据湖概念认知
  15. 直接在浏览器运行Python代码
  16. dell emc isilon解决添加AD域后有时间不同步警告
  17. matplotlib隐藏坐标轴
  18. 0行代码拿210万年薪,ChatGPT催生新型「程序员」岗:工作纯靠和AI聊天
  19. 1034:计算三角形面积
  20. android环境监测,基于Wi―Fi和Android家居环境监测与实现

热门文章

  1. c语言子函数作用是什么意思,C语言编译器中常见的函数用法以及作用详解
  2. 一只喵的西行记-14 蜗牛的金字塔说
  3. PyTorch笔记【1】---A卡安装(RX580)无果后,改为N卡(2070)安装。这年头就不要用CPU了来搞AI了
  4. 【积水成渊-逐步定制自己的Emacs神器】6:首次变身IDE,Emacs C++ IDE
  5. nmn抗衰老有哪些品牌,nmn最新排名情况,掏心窝子推荐
  6. Java笔记-面向对象(上)
  7. GIS定位和自定义图标
  8. win10dnf服务器未响应,win101903玩DNF卡顿 ,掉线,死机的解决办法
  9. Pygame开发Flappy Bird小游戏(下)
  10. 【网页制作】CSS文本和字体属性讲解【附讲解视频】