2022-12-8 #6 飘零在无间 决裂尘埃世界
——校长《告别曲》
30 AT_code_festival_2017_qualb_f Largest Smallest Cyclic Shift
一个比较简单的做法:(但我不能说明其正确性)
使用 multiset 维护字符串的若干“子结构”,每次选择两个进行拼接。循环移位肯定会使字典序最小的子结构放在最前面,于是我们将其接上字典序最大的后缀。
复杂度 \(O(n^2\log n)\)。
一个很容易得知正确性的做法:
逐位确定字符串(假设现在确定的字符串为 \(U\)),即计算:是否存在一个字符串 \(S\),使得 \(S\) 的最小循环移位大于等于 \(U\)。
那么可以令 \(S\) 为自己的最小表示,那么 \(S\) 满足,对于任意后缀 \(q_i\) 有:\(q_iSSSSS\cdots\geqslant SSSS\cdots\)。
由于 \(S\geqslant U\),所以 \(q_iUUUU\cdots\geqslant UUUU\cdots\)。
那么限制就只在后缀上了,我们可以从后往前 dp 这个 \(S\) 串,复杂度 \(O(n^5)\)。
31 P3349 [ZJOI2016]小星星
直接树形 dp 是 \(O(3^nn)\) 的,基本跑不动。
我们记录集合的原因是“并为全集”的限制,我们不妨容斥这个并,枚举一个集合表示只能用这个集合内的数,这样就可以 \(O(2^nn^3)\) 了。
又摆了一天,怎么能这样???
期待起来了!!!另外!想要告诉各位小伙伴!
12月11日晚上8点,A-SOUL二周年纪念直播!时光无涯,你我共同奔赴~
记得要来哦!
32 J Middle Race
真的很难啊,为什么都会这东西。
尝试用 \(n\) 个 \(a/b/c\) 组合出一个最接近 \(\frac{n(a+b+c)}{3}\) 的数, \(x\) 接下来说明这个构造一定合法。
不妨令这个数大于 \(\frac{n(a+b+c)}{3}\),那么对手的两个数一定一个大于 \(\frac{n(a+b+c)}{3}\),一个小于 \(\frac{n(a+b+c)}{3}\),若想让 \(x\) 不合法,大于 \(\frac{n(a+b+c)}{3}\) 的数一定小于 \(x\),这与“最接近”矛盾。
33 B Call Me Call Me
简单数据结构,没人过。
这类问题有着一个经典的解法,类似 P7603 [THUPC2021] 鬼街,可以设定很多个阈值,一旦一个阈值发生了击破,我们就重新分配阈值。
使用猫树分治,只需在 \([l,mid],[mid+1,r]\) 设定阈值,猫树每一层仍然采用线段树维护,复杂度 \(O(n\log^2 n)\)。
但这太难写了,有一种比较好写的根号。
考虑操作分块,那么我们只需考虑一个人的最后根号次修改。等其计数器不超过根号时,将其挂在线段树上就好了。
34 M Rock-Paper-Scissors Pyramid
为啥这是签到啊。
考虑维护一个栈,栈内保存一个操作序列,满足任意两个相邻的手势,前面都能打败后面,那么栈底就是答案。
这个栈的更新是平凡的。