当前位置: 首页 > news >正文

CF506E Mr. Kitayutas Gift

没见过的套路,还是很神的。模数写成 \(10^4+5\) 调了 1h /fn。

首先记 \(m=|S|+n\)

计数考虑 dp。插入字符使其成为回文串 dp 显然是困困难难的。

考虑从最终插入字符后的结果入手,则对于回文串 \(T\) 能通过 \(S\) 插入字符得到当且仅当 \(|T|=|S|+n\)\(S\)\(T\) 的子序列。

因为 \(T\) 是回文串,所以若是类似状态 \(f_{i,j}\) 表示前 \(i\) 个字符最多匹配到 \(S\)\(j\) 个字符则会有后效性。

于是设计状态 \(f_{i,l,r}\) 表示考虑 \(T\) 的前后 \(i\) 个字符,\(S\) 剩下 \(S:[l,r]\) 未匹配,则转移为:

  1. \(S_l=S_r\)

\(f_{i,l,r}\to f_{i+1,l+1,r-1}\)

\(f_{i,l,r}\to 25\cdot f_{i,l,r}\)

第一条转移表示 \(T_{i+1}=T_{m-i}=S_l(S_r)\)\(T_{i+1}\)\(T_{m-i}\) 只有一种选择,且 \(S_l,S_r\) 均会被匹配。

第二条转移表示 \(T_{i+1}=T_{m-i}\ne S_l(S_r)\)\(T_{i+1}\)\(T_{m-i}\) 有 25 种选择,且 \(S_l,S_r\) 均不会被匹配。

  1. \(S_l\ne S_r\)

\(f_{i,l,r}\to f_{i+1,l+1,r}\)

\(f_{i,l,r}\to f_{i+1,l,r-1}\)

\(f_{i,l,r}\to 24\cdot f_{i,l,r}\)

前两条转移式分别表示 \(T_{i+1}=T_{m-i}=S_l\)\(T_{i+1}=T_{m-i}=S_r\)

第三条转移表示 \(T_{i+1}=T_{m-i}\ne S_l/S_r\)\(T_{i+1}\)\(T_{m-i}\) 只有 24 种选择,且匹配情况不变。

http://www.jsqmd.com/news/24990/

相关文章:

  • 常用存储器介绍
  • 记录一次成功的springBoot
  • 2025.10.28总结
  • 代码大全2阅读笔记(1)
  • 进程与进程间通信(IPC)
  • QT:键盘事件(添加资源图片)
  • 2025.10.28
  • docker desktop:更新WSL2+安装nginx
  • # 学代码--看懂了但是不会写
  • 2025-10-28 aoao Round 比赛总结
  • P11307 [COTS 2016] 建造费 Pristojba 分析
  • 程序员如何打破职业瓶颈?先搬开这3块绊脚石。
  • 乱学点东西#2 :菠萝/蓝莓/Boruvka算法
  • 文件清理,推荐几款常用软件
  • AI时代的设计师:从工具到“超人”的进化之路
  • MyBatis 动态 SQL 实现原理 - Higurashi
  • bililun
  • 《程序员修炼之道:从小工到专家》观后感第二篇
  • 【学习笔记】数据结构全家桶
  • 社区
  • 「Gym 102759I」Query On A Tree 17
  • Mybatis使用简述
  • C++里的代码命名规范
  • 最小二乘问题详解6:梯度下降法
  • JavaWeb01
  • 现代C++编程初体验
  • Delphi 利用接口实现frame窗体间的通讯(互动)
  • NRF54LM20A 芯片的优点
  • 零散点小总结(25.10.28)
  • Top Tree大学习