Codeforces Round #737 部分题解
题目评分:800-1100-1700-2200-2800
AB 是水题,不写了不写了。
C Moamen and XOR
Solution
套路题,这种东西直接按位考虑。从高到低考虑每一位,分类讨论一下:
如果我们让当前位的 \(\And\) 值 \(>\oplus\) 值,那么只有在 \(n\) 为偶数的时候才能成立,且只有一种方法,然后假设现在是第 \(k\) 位,剩下的 \((k-1)n\) 位可以乱取共 \(2^{(k-1)n}\) 方法。
如果我们让当前位的 \(\And\) 值 \(=\oplus\) 值,按奇偶性讨论:
若 \(n\) 为奇数:\(\And\) 值 \(=1\) 时,可以使 \(\oplus\) 值也 \(=1\),只有一种方案;\(\And\) 值 \(=0\) 时,想要使 \(\oplus\) 值等于 \(1\),有 \(\displaystyle {\sum^n_{i=0\And i\equiv 0 \pmod 2}\binom{n}{i}}\) 种方案。发现这两个方案的总种数可以预处理。
若 \(n\) 为偶数:\(\And\) 值不能 \(=1\),那么只有 \(\And\) 值 \(=0\) 的情况,那么类似上述处理,有 \(\displaystyle{\sum^{n-2}_{i=0\And i\equiv 0 \pmod 2}\binom{n}{i}}\) 种方案,同样可以预处理。
直接暴力做即可,时间复杂度 \(O(t(k+n))\)。
D Ezzat and Grid
Solution
设 $f_i$ 表示强势保留第 $i$ 行,最多保留的行数,那么转移方程为:其中 \(c(i,j)\) 表示第 \(i\) 行与第 \(j\) 行能否拼在一起。
朴素转移是 \(O(n^3)\) 的,能过有鬼了。
考虑线段树优化,对于第 \(i\) 行中被染黑的每一段,做一遍区间对 \(f_i\) 取 \(\max\),而当转移第 \(i\) 行的时候,对染黑的每一段取 \(\max\)。
这样,我们用线段树将 dp 条件与转移合在了一起,实现上需要一棵支持区间取 \(\max\),区间查 \(\max\) 的线段树,时间复杂度 \(O(n\log n)\)。
E Assiut Chess
Solution
趣题,如果下次课件我还做趣题选讲的话可能会选进来😃,但显然我不会做这样的事情了。考虑直接从 \((1,1)\) 出发,开始一行一行的排除。
如果国王往下了,那说明它以无路可走,直接往下一行。
否则的话,一个格子一个格子的逼国王往下,你感觉是一个优秀的做法。
但是,如果国王直接偷鸡,你下去了,他上来了,咋办,直接重新逼他。
实现非常简单,可过。

浙公网安备 33010602011771号