251125 模拟测 总结
痛哭。还是太菜了喵。
呜。\(100+40+30+5=175\),这真的是我 S % 你的成绩吗……好在写了的分都搞到手了,没挂。
没挂就算是如愿了吧。
T1 好难,T2 好难,T3 好难,T4 好难。
Pro.A
想了将近一个小时,怎么说:(
首先把正常的括号序列匹配掉,并把使用了的括号进行标记。然后正着遍历一遍,找到那些“无主”的右括号,看有没有问号给它用,没有它就真匹配不上了,累加答案。接着反着看“无主”左括号,形式类似。最后看看剩下的问号能不能再匹配一些,于是就结束了。
Pro.B
好难的,状压,呜。
赛时打了个纯暴力以及长度全为 \(1\) 的特判,\(40\) 分。这也是在不打正解的情况下能拿到的最多的分了呜,还是没有西西弗的暴力分多呜
正解——状压!
有什么惊讶的,\(n\) 就 \(20\),状压不是理所当然……么。
定义 \(dp_{st,i}\) 表示当前下标编号集合为 \(st\)(二进制压缩)的字符串都已经被选进去了,并且最后一个是 \(i\)。枚举 \(i\) 和 \(st\)(\(i\) 不存在于 \(st\) 中),以及 \(st\) 中的一个 \(j\)。让 \(st'\) 表示 \(i\) 加入 \(st\) 后的值。于是我们要做的就是用 \(dp_{st,j}\) 去转移 \(dp_{st',i}\)。
观察这个题目求的这个什么前缀,发现当你把左括号视作 +1 右括号视作 -1 的时候,你要求的就是有多少个前缀加起来和是 \(0\),但是如果中途什么时候出现了负数!噢那后面的就都没了。
发现这个东西可以用桶来维护,然后对每个字符串做,就做完了。
Pro.C
喔喔喔,不能有 \(\log\) 是吗?
赛时直接模拟成功斩获 \(30\)pts。
然后你从卡牌的角度去考虑问题,考虑这每一张卡牌的贡献。发现当国王塔的攻击力在某个范围的时候,该卡牌对国王造成的伤害是一定的,并且只有 \(O(\sqrt{V})\) 个区间。
则对于这么多个的区间,根据每个区间特定的伤害值,对该区间进行区间减法,模拟受到的伤害。考虑使用树状数组去维护这个东西。
同时由于这个什么答案具有单调性,所以我们可以在树状数组操作的同时,用一个变量记录当前被打败的国王最大等级,每操作一次,看是否有新的等级的国王被灭亡(树状数组上的单点询问),若有则记录答案,更新变量。
时间复杂度是 \(O(n \sqrt{V} \log V)\) 的,会被卡常,过不太去。
怎么办呢,我们只好尝试消掉树状数组的这个 \(\log\)。
发现我们查询的位置也是递增的,所以我们可以不用数据结构维护区间加,而是动态维护差分数组。于是这样就把树状数组的 \(\log\) 给干掉了,\(O(n \sqrt{V})\) 当然那就是能过的啦!
Pro.D
卷积,二项式公式,我,怎么玩?
一直在推式子,把我绕晕了,先不补。

浙公网安备 33010602011771号