首页 > 其他分享 >题解【CF1363F Rotating Substrings】

题解【CF1363F Rotating Substrings】

时间:2022-09-28 09:01:38浏览次数:78  
标签:字符 匹配 前缀 题解 CF1363F Rotating Substrings Theta

CF1363F Rotating Substrings *2600
解题报告。
不一定更好的阅读体验

感觉楼上的 DP 状态设计与 DP 转移方程的联系是说不通的,有些地方没有讲明白,所以这篇题解就详细讲一下。

首先,一次操作的本质是,将一个 \(S\) 的一个字符插到前面的某一个位置。

-1 是容易的,即对于任意一个字符 \(c\),在 \(S\) 中的出现次数和 \(T\) 中的出现次数是相等的。

那么我们就可以设 \(f_{i,j}\) 表示将 \(S\) 的长度为 \(i\) 的前缀,插入最少几个字符,使得和 \(T\) 的长度为 \(j\) 的前缀相同。显然这里 \(i,j\) 的大小关系为 \(i\le j\)。

考虑 \(f_{i,j}\) 的转移,首先,我们可以不让 \(s\) 的前缀 \(i\) 和 \(t\) 的前缀 \(j\) 匹配,而是让 \(s\) 的前缀 \(i\) 和 \(t\) 的前缀 \((j-1)\) 进行匹配,这时候会多出一个 \(s_j\) 没有匹配。我们让 \(i\) 之后的某一个 \(s_k=t_j\) 的字符 \(s_k\) 向前移动到 \(i\) 的前面,与 \(s_j\) 进行匹配,花费为 \(1\)。注意,这里一定会找到一个合法的 \(s_k\),因为每一个字符都是两两配对的。于是我们有状态转移方程 \(f_{i,j}=f_{i,j-1}+1\)。

其次是比较简单的 case,若 \(s_i=t_j\),那么可以通过 \(f_{i-1,j-1}\) 来继承。\(f_{i,j}=f_{i-1,j-1}\)。

最后一种情况,设 \(x\) 表示 \(s_i\) 在 \(S\) 的前缀 \(i\) 中出现次数,\(y\) 表示 \(s_i\) 在 \(T\) 的前缀 \(j\) 中出现次数。

若 \(x\le y\) 说明了什么?考虑 \(f_{i-1,j}\),\(S\) 的前缀 \((i-1)\) 与 \(T\) 的前缀 \(j\) 中 \(s_i\) 的数量 \(x',y\) 一定满足 \(x'<y\)。这也就说明,要想完成 \((i-1)\) 和 \(j\) 的匹配,就必须至少把 \(s_i\) 移动到前面。然后再移动若干字符。把 \(s_i\) 移动到前面后再插入若干字符本质上是前缀 \(i\) 与 \(j\) 进行匹配,也就是 \(f_{i,j}\) 的值,所以这个部分就直接继承:\(f_{i,j}=f_{i-1,j}\)。

\(x,y\) 求法可以用一个 \(\Theta(26n)\) 的前缀和搞定,转移的复杂度是 \(\Theta(n^2)\) 的,总复杂度为 \(\Theta(n^2)\)。

代码实现非常简单,不放了,想要的私信我就好。

标签:字符,匹配,前缀,题解,CF1363F,Rotating,Substrings,Theta
From: https://www.cnblogs.com/UperFicial/p/16736770.html

相关文章

  • CF1603D Artistic Partition 题解
    题意一个长度为\(n\)的序列,分为\(k\)段,每段代价是\(c(l,r)=\sum\limits_{i=l}^r\sum\limits_{j=i}^r[\gcd(i,j)\geql]\),求总代价的最小值。分析若\(2^k>n\),总......
  • Tomcat最全乱码问题解决方案(保姆教程)
    目录概述原因解决方法1.idea乱码和startup.bat启动控制台日志乱码(Tomcat日志乱码)2.浏览器乱码概述tomcat乱码问题相信大家肯定都遇见过,本篇将详细介绍有关Tomcat的各种......
  • vuejs 开发问题解决方案总结一
    文章中提到的很多东西都在我的demo中用到,我的demo地址:​​https://github.com/MrZhang123/Vue_project/tree/master/vue_spa_demo​​1.Vuejs组件vuejs构建组件使用Vue.comp......
  • mongoose连接collections会自动加s的问题解决
    问题的解决:设置mongoose.model()的第三个参数,代码如下。module.exports=mongoose.model('Course',userSchema,'course');或者,可以给Schema传入第二个参数,......
  • 【题解】CF1589D Guess the Permutation
    这是一个交互题!题目链接-->Problem-D-Codeforces题目大意这是一个交互题!给定一个长度为\(n\)的自然排列,但其中\([i,j-1],[j,k]\)两部分被翻转了。你可以进......
  • TimedRotatingFileHandler 固定时间日志切割
    TimedRotatingFileHandler:创建固定时间间隔的日志,它被集成在logging中,直接调用进行实例化和配置就可以使用TimedRotatingFileHandler(filename[,when[,interval[......
  • 题解【P7515 [省选联考 2021 A 卷] 矩阵游戏】
    P7515[省选联考2021A卷]矩阵游戏解题报告。不一定更好的阅读体验。一年前我在省选赛场上折戟沉沙,一年后我从到下的地方再摔一跤。我成功了,我仍然是以前的那个......
  • 洛谷 CF1257F Make Them Similar 灰 题解
    前言本题解采用折半搜索算法完成,对于不打算用这种方法的同学,这篇题解可能会浪费你人生中宝贵的十几分钟。思路此题似乎找不出什么好的性质,那么考虑暴力。发现\(x,a\)......
  • LG4463 calc 题解
    传送门题意一个序列$a_1,a_2,\dots,a_n$是合法的,当且仅当:$a_1,a_2,\dots,a_n$都是\([1,k]\)中的整数。$a_1,a_2,\dots,a_n$互不相等。一个序列的值定义为它里......
  • P4965 题解
    题目传送门被同机房神犇使用一顿晚饭的时间爆切并当成作业布置给我的题...虽然是紫,但实际难度处于可以接受的范围内。题目分析开始的思路是\(\text{set}\)乱搞,因为发......