[ABC434F] Concat (2nd) 题解
十一月二十九日,吾与 ABC 之试,乱搞而解 F,得效值(Performance)二千四百,甚悦。
解法
简化问题
最小的排列方式是很典的。考虑先求出这个东西。
考虑邻项交换。将所有字符串按照
直接写
考虑把
比较字符串的经典套路是,找到它们的最长公共前缀(LCP),然后比较 LCP 后一个位置谁大谁小。找 LCP 可以使用哈希加二分解决。单次查找
时间复杂度不知道,总之跑的飞快。
原题
开始考虑次小字符串。
记最小的排列方法为
如果存在相邻的
当且仅当上述条件满足时,次小字符串与最小字符串相同。
这个东西可以使用
由此我们继续猜测,猜测次小的排列是在最小的基础上,交换一对
根据直觉,这个
时间复杂度
彩蛋
-
官方题解证明了只用考虑最后两个
i 。强强?!?! -
本题在 clist 评分为
\textcolor{#FF8822}{*2507} 。但感觉虚高了() -
群友想到,在排序前可以先将
s 数组random_shuffle然后直接用s+t<t+s 作为比较规则快排。这样选到特别长的字符串的概率很低,足以通过。