传送门:bzoj4044


题解

reversereversereverse操作可以生成一个长度为偶的回文串。

对于长度≥4\geq 4≥4的回文串,用reversereversereverse来构造相比直接加会使得操作次数减少,=2=2=2时也不亏。那么问题就转化成了找到一个极大的偶回文串来优化答案。

在这道题,完全不需要考虑到奇回文串,因为若其内部不包含偶回文,就不能执行reversereversereverse,若其内部包含偶回文,也只需要考虑这个内部的偶回文再在外部插入单个字符即可。

设偶回文iii的长度为lenilen_ileni​,最少构造操作次数为fif_ifi​。
设字符串总长为nnn,则ans=min(fi+n−leni)ans=min(f_i+n-len_i)ans=min(fi​+n−leni​)

构造回文自动机,递推得到fif_ifi​:

设偶回文串iii首尾分别去掉一个字符得到fatifat_ifati​,则fi=min(fi,ffati+1)f_i=min(f_i,f_{fat_i}+1)fi​=min(fi​,ffati​​+1)(末尾填一个字符后reversereversereverse)
设长度≤leni2\leq\dfrac{len_i}{2}≤2leni​​的最长的SiS_iSi​的后缀偶回文串为lasilas_ilasi​,则fi=min(fi,flasi+leni2−lenlasi+1)f_i=min(f_i,f_{las_i}+\dfrac{len_i}{2}-len_{las_i}+1)fi​=min(fi​,flasi​​+2leni​​−lenlasi​​+1)

注意不能每次暴力跳父边找lasilas_ilasi​,需要记录lasfatilas_{fat_i}lasfati​​后向下找,才能保证复杂度是线性的(奇偶回文串都要记录laslaslas)


代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100;int tk,n,p,ans,w[N],las[N];
int len[N],f[N],ch[N][26],cnt;
char s[N];inline int new_node(int x)
{len[cnt]=x;ch[cnt][0]=ch[cnt][2]=ch[cnt][6]=ch[cnt][19]=0;f[cnt]=0;return cnt++;}
inline int get_fail(int p,int m)
{for(;s[m-len[p]]!=s[m+1];p=f[p]);return p;}inline void ins(int alp,int m)
{p=get_fail(p,m);if(!ch[p][alp]){int i,cur=new_node(len[p]+2);if(!(len[p]&1)) w[cur]=min(len[cur],w[p]+1);f[cur]=ch[get_fail(f[p],m)][alp];ch[p][alp]=cur;if(len[cur]<=2) las[cur]=f[cur];else{for(i=las[p];s[m-len[i]]!=s[m+1] || (((len[i]+2)<<1)>len[cur]);i=f[i]);las[cur]=ch[i][alp];if(!(len[cur]&1)){for(i=las[cur];i>1 && (len[i]&1);i=f[i]);if(i>1) w[cur]=min(w[cur],w[i]+len[cur]/2-len[i]+1);}}}p=ch[p][alp];
}inline void sol()
{int i,j,k;scanf("%s",s+1);w[0]=1;n=strlen(s+1);cnt=0;f[new_node(0)]=new_node(-1);p=0;ans=n;for(i=1;i<=n;++i) ins(s[i]-'A',i-1);for(i=2;i<cnt;++i) if(!(len[i]&1)) ans=min(ans,w[i]+n-len[i]);printf("%d\n",ans);
}int main(){for(scanf("%d",&tk);tk;--tk) sol();return 0;
}

【BZOJ】4044: [Cerc2014] Virus synthesis-回文自动机相关推荐

  1. bzoj 4044: [Cerc2014] Virus synthesis 回文树

    题意 你要用ATGC四个字母用两种操作拼出给定的串: 1.将其中一个字符放在已有串开头或者结尾 2.将已有串复制,然后reverse,再接在已有串的头部或者尾部 一开始已有串为空.求最少操作次数. l ...

  2. BZOJ 4044 Luogu P4762 [CERC2014]Virus Synthesis (回文自动机、DP)

    好难啊..根本不会做..基本上是抄Claris... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4044 (luogu) ...

  3. BZOJ4044 Luogu P4762 [CERC2014]Virus Synthesis (回文自动机、DP)

    好难啊..根本不会做..基本上是抄Claris... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4044 (luogu) ...

  4. bzoj 4044 Virus synthesis - 回文自动机 - 动态规划

    题目传送门 需要高级权限的传送门 题目大意 要求用两种操作拼出一个长度为$n$的只包含'A','T','G','C'的字符串 在当前字符串头或字符串结尾添加一个字符 将当前字符串复制,将复制的串翻转, ...

  5. 【BZOJ】2160拉拉队排练-回文自动机

    题解 这题好坑啊.模数也十分诡异. 注意:K≤1012K≤1012K\leq 10^{12},要开long longlonglonglong\ long. 注意:只要奇数个数的回文串 注意:达不到KK ...

  6. BZOJ 4480: [Jsoi2013]快乐的jyy(回文自动机)

    Description [故事背景] JYY在JSOI有很多很多的好朋友,比如PUPPY,KFC还有PUPPUP.因为 有了这么多的好朋友,所以JYY每天都很快乐.某天,JYY发现好朋友之间关 系的好 ...

  7. 回文树或者回文自动机,及相关例题

    回文树简述 在大部分说法中,回文树与回文自动机指的是一个东西: 回文树是对一个字符串,基于自动机思想构建的处理回文问题的树形结构: 回文树是对着一个单串建立的: 于是他主要用于计数(回文子串种类及个数 ...

  8. 后缀自动机/回文自动机/AC自动机/序列自动机----各种自动机(自冻鸡) 题目泛做...

    题目1 BZOJ 3676 APIO2014 回文串 算法讨论: cnt表示回文自动机上每个结点回文串出现的次数.这是回文自动机的定义考查题. 1 #include <cstdlib> 2 ...

  9. 【回文自动机】bzoj3676 [Apio2014]回文串

    回文自动机讲解!http://blog.csdn.net/u013368721/article/details/42100363 pam上每个点代表本质不同的回文子串.len(i)代表长度,cnt(i ...

最新文章

  1. oh-my-robot
  2. 使用增强型后缀数组(ESA)的文本匹配算法
  3. aosp 为什么某些目录没有编译_编译Android AOSP代码
  4. 详解Ibatis写CLOB数据
  5. 小姐姐为你解析马爸爸是怎么用大数据“宰你”的
  6. jsoup怎么获取两个标签之间的text?
  7. 2018秋季C语言学习总结
  8. 前端学习(2880):数据代理和劫持
  9. java 静态对象语法_04.Java 语法
  10. 交叉编译docker_端侧推理引擎Tengine初识:安卓平台交叉编译并跑通MobileNetV1
  11. “江山如此多娇” 瞰世界——第五届(2019)中国无人机影像大赛正式启动
  12. IDEA导入Git项目后右键项目找不到Git选项的解决方法
  13. 转载-深度学习与NLP 深度学习|机器学习|人工智能 精品视频教程合集分享
  14. perl和python的相互调用
  15. 【人民币识别】基于matlab GUI形态学钞票面额识别与统计【含Matlab源码 906期】
  16. win10 Java 环境配置
  17. 工作流管理系统开发之十 数据库连接及事务设定
  18. STM32F1下载程序方法
  19. 记事本html表白,霸道总裁之代码强势表白
  20. python给批量图片添加文字 脚本_Python实现图片添加文字

热门文章

  1. WIZnet官方网盘
  2. 大白菜U盘启动 V201203
  3. Autolisp 框选图形,统计各类图形的数量,输出到文件。
  4. 第十六章 网络通信协议探讨
  5. OceanBase数据库创始人阳振坤分享征战6088万tpmC的艰辛之路
  6. AutoCAD 突然打不开,显示“VCOMP.DLL”文件缺失,需要重新安装。
  7. 使用canvas实现黑客帝国数字雨
  8. 外勤人员管理的问题如何解决
  9. html把图片做正方形背景图片,完美的页面背景图片制作
  10. 劲舞团登陆不上消息服务器,劲舞团连接不上服务器的解决方法