首页 > 其他分享 >题解 P3526 [POI2011]OKR-Periodicity

题解 P3526 [POI2011]OKR-Periodicity

时间:2023-01-04 11:24:58浏览次数:42  
标签:存在 周期 Periodicity 题解 POI2011 构造 合法 长度 border

P3526 [POI2011]OKR-Periodicity

nb 题。

先说一下这题的入手点。不妨假设一个字符串一定存在一个短周期(约定周期 \(p\) 满足 \(2p\leq |s|\) 的为短周期),假设短周期的长度为 \(l\),那么可以说明所有长度小于 \(|s|-l\) 的周期都能写成 \(kl,k\in\mathbb{Z}\) 的形式,所以我们只需要关注长度在 \(|s|-|s|\bmod l\sim |s|\) 之间的周期即可,其它的部分都是重复的循环节。所以我们把这部分单独提出来,设为 \(t'\),且保证 \(s\) 可以表示成 \(tt\cdots t'\) 的形式,显然我们只需要构造 \(tt'\) 即可。假设 \(\text{solve}(s)\) 为构造和 \(s\) 周期相同的串,那么可以把 \(s\) 分解,执行 \(qq'=\text{solve}(tt')\),其中 \(q,q'\) 分别与 \(t,t'\) 对应,然后将前面的 \(q\) 重复就好了。

关键问题在于字符串不存在短周期的情况,关键问题在于我们并不能用上面的方法减小问题规模。转而考虑 border,存在长周期意味着存在短 border,能不能尝试构造 border 来缩小规模呢?不妨设字符串的最长 border 为 \(t\),那么 \(s=tat\),我们的目的是构造 \(t\) 之后构造字典序尽可能小的 \(a\) 来使得原串不存在更长的 border。

直接探索合法条件过于复杂,不妨考虑特殊情况。字典序最小的 \(a\) 为全 \(0\) 串,考虑判断全 \(0\) 串是否合法。如果不合法,即存在更长的 border \(l\),假设 \(l\) 是最长 border,我们分类讨论 \(l\) 的长度:

  • \(l\leq |t|+|a|\),此时 border 的形态为 \(ta'\) 和 \(a't\),其中 \(a'\) 表示削减了一定长度的全 \(0\) 串,由此可以推得 \(t\) 是一个全 \(0\) 串。那么使之合法的方法是把 \(a\) 的最后一个字符变为 \(1\)。
  • \(l>|t|+|a|\),此时有 \(2|t|+|a|-l\) 为原串周期,且是最短周期。由于 \(|t|+|a|\) 也是原串周期(\(t\) 是原串 border),有 \(2|t|+|a|-l\) 为 \(|t|+|a|\) 因数,所以 \(ta\) 是一个整周期串,进一步地,\(ta\) 一定可以表示成 \(baba\cdots ba\),其中 \(b\) 是一个非全 \(0\) 的串。容易发现这就是存在更长 border 的充分必要条件。那么如果继续沿用上面做法,将 \(a\) 的最后一个字符替换成 \(1\) 呢?假设仍然存在 border,可以发现,\(a'\) 的末尾字符必然和字符串 \(b\) 的一个字符相匹配,假设为 \(b_i\),分类讨论:
    • \(i\leq |a|\),画图可以发现 \(b\) 存在长度为 \(|b|-i\) 的 border,即长度为 \(i\) 周期。所以 \(b\) 的末尾 \(i\) 个字符一定是 \(|a|\) 的 \(i\) 后缀的一个循环移位(rotate),那么 \(b\) 的末尾 \(i\) 个字符一定存在一个 \(1\),而它对应的是一个 \(a\) 的前缀,矛盾。
    • \(i>|a|\),此时 \(b\) 的 \(i\) 前缀由 \(ca'\) 组成,且 \(b\) 仍然存在一个 \(|b|-i\) 的 border,且 \(b\) 的 \(|b|-i\) 后缀为 \(ac\)(考虑 \(a'\) 前面的 \(b\)),那么 \(ac=ca'\),这两个 \(1\) 的个数都不相同,矛盾。

所以如果不合法的话,替换成 \(00\cdots 01\) 就是合法的,而这显然非常优秀。所以综上,对于只存在短 border 的串,我们可以通过构造 border,并调整中间串使字符串合法。

观察可以发现我们每次都让串长减小一般,总时间复杂度为 \(T(n)=T(n/2)+\mathcal{O}(n)=\mathcal{O}(n)\)。

梳理整个思维过程就是:

  • 通过存在短周期这一特殊条件,考虑归纳构造思路,进而发现长周期的特殊情况。
  • 观察到长周期的本质问题在于构造中间串,通过判断全 \(0\) 串是否合法的特殊情况,分类讨论探索性质并得到最终合法构造。

标签:存在,周期,Periodicity,题解,POI2011,构造,合法,长度,border
From: https://www.cnblogs.com/yllcm/p/17024329.html

相关文章

  • 寒假第一次洛谷蓝桥个人赛 题解+补题(下)
    D.灵能传输##神仙结论把前缀和应用到极致,6先考虑三个数a,b,c,进行一次变换也就是a+b,-b,c+b可见三个数之和不变,也就是s[3]不变然后之前的s[1]+b,愿称之为s[2]之前的s......
  • P3701 题解
    前言题目传送门!更好的阅读体验?比较简单的最大流基础建图题。以下为了方便,我们把byx称作A,把诗乃酱称作B。思路首先发现,人物的唯一限制就是寿命。所以:从源点向每......
  • ros,unknown package [geometry_msgs] 问题解决
    CMakeLists.txt:在find_package中添加 geometry_msgs:                          2.在generate_messages里添......
  • laravel生成PDF使用插件barryvdh/laravel-dompdf及中文乱码问题解决
    使用1.composer安装composerrequirebarryvdh/laravel-dompdf2.发布配置文件,生成的配置文件config/dompdf.php,也可选择忽略此步骤phpartisanvendor:publish......
  • CF446D 题解
    题意传送门给定一张\(n\)个点\(m\)条边的无向图,每个节点有权值\(v_i=\)\(0/1\)。角色从节点\(1\)开始随机游走,走到\(n\)停止。求其经过路径上权值和等于\(k-1......
  • 洛谷2022年十二月月赛题解(作者:Kubic)
    T1只有第一秒走的长度为奇数,后面每一秒走的长度都为偶数,因此所有除\(0\)外的偶数点都是不可达的。当\(n\)为奇数时,设\(d\)为满足\(\sum\limits_{i=1}^d2^{i-1}\g......
  • C# 反射获取属性GetProperty无效的问题解决方法
    1·(20条消息)C#反射获取属性GetProperty无效的问题解决方法_不卡机的博客-CSDN博客_c#getproperty2·C#type.GetType().GetProperty("属性名")_已解决_博问_博客园(......
  • 寒假第一次洛谷蓝桥个人赛 题解+补题(上)
    传送门部分,今天整不完了A.带分数(补题)##这...话说赛时难以置信地看了好几遍题目,然后完全没思路(我以为有什么神仙结论,压根没想暴力搜索,还是被虎到了,然后就根本没管这道......
  • [Phoenix基础]-- 常见问题解答
    常问问题​​我想开始 有没有凤凰HelloWorld?​​​​凤凰城有没有办法批量加载?​​​​如何将Phoenix表映射到现有的HBase表?​​​​有没有任何提示来优化凤凰?​​​​如......
  • Codeforces Good Bye 2022 CF 1770 F Koxia and Sequence 题解
    题目链接注意题目要求的是所有好序列的所有元素的XOR之和的XOR之和。我一开始以为是所有XOR之和的加法和导致不知道官方题解在讲什么。假设我们枚举一个位置\(1\lei\le......