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

卷积,二项式公式,我,怎么玩?

一直在推式子,把我绕晕了,先不补。

posted @ 2025-11-26 21:08  嘎嘎喵  阅读(1)  评论(0)    收藏  举报