赛后讲题,发现要注意到先将 a 数组排序,然后注意到最后一个未匹配的 B 类点之前的 A 类点都要匹配,之后的 B 类点都要匹配,基于此可以前后 dp,然后拼起来。和之前讲的某个题是一类套路。
T3
读懂题了,感觉要挖掘一些性质。
研究了一会,发现 DAG 肯定 A 赢,推广一下,后续没有环的一定也不行。
然后就不会了。
赛后讲题,发现还要发现一些性质。
首先删掉只能有限次操作的点。
如果一个点只有一条出边,那么它只能到后面那个点,所以可以合并两个点。
启发式合并一下。
需要惊人的注意力。
总结
好的方面是没有出现前一天的重大失误,比赛节奏策略也逐渐适应。
不好的方面是暴力分依旧没有拿满,回去要摆正好心态,好好练 dp 了。
2025/07/30
状态回来一点了,但是还是有失误。
T1
一看是异或,感觉和前两天 NOIP 模拟赛的 B 很像,因此直接设 f_{i,j} 表示考虑了前 j 位,数字为 i 的代价。写完发现,大样例要跑 5s,回去看看,原来是复杂度算假了。最坏情况下他每次都要更新 2^m 个点,T 飞了。
赶紧看看怎么修,但是到 9:30 没想出来,写了个 c\le 3 跑了。
后面回来再看,没有发现什么好的性质。
赛后讲题,不用记位数,只需要每次暴力访问 m 个可能更新到的点,暴力 bfs 更新,由于每个数最多被更新 m 次,所以复杂度是对的。
没做出来,有点不应该。
T2
2 min 读懂题,暴力模拟就能过第一个 sub。可以倒序考虑每次和哪个位置交换,但是复杂度好像不对,就没写(实际上是可以过 sub2 的)。继续想,没想出来。
讲题,咋是数学题。把开始的 x 看成矩阵,异或就是广义矩阵乘。把每次的乘的矩阵命名为 A。因为倒序考虑,所以 xA^i \bmod i 的结果我是知道的,先只考虑 2^k,那我就知道了结果的底 i 位。由于 x 的每一位都是原来的一些位的线性组合,所以我们就得到了 i 个方程。但是方程数有点少,考虑多用一点。我们知道了 \bmod i 的余数,我们就知道了 \bmodi 的因数的余数,所以我们就知道了 \bmod\operatorname{lowbit} i 的余数,那我们知道了更多方程,自由的位数就更少了。
T3
3min 读懂题,实际上就是要有一个排列满足第 i 行第 p_i 列为 1 的概率。
首先想到暴力全排列,然后想到,这个东西可以 dp,每次枚举出来每位是 0/1,f_{i,s} 表示前 i 行,选了 s 中的列,能不能选出来的全是 1,转移是容易的。