Examples

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)\) 了。


又摆了一天,怎么能这样???

《未来可C》首期嘉宾预告——嘉然

期待起来了!!!另外!想要告诉各位小伙伴!
12月11日晚上8点,A-SOUL二周年纪念直播!时光无涯,你我共同奔赴~
记得要来哦!


vp:2022 CCPC Mianyang

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

为啥这是签到啊。

考虑维护一个栈,栈内保存一个操作序列,满足任意两个相邻的手势,前面都能打败后面,那么栈底就是答案。

这个栈的更新是平凡的。

posted @ 2022-12-08 10:19  xiaoziyao  阅读(142)  评论(0编辑  收藏  举报