2021 杂题乱做

目录

CF R 737

比赛链接

题目评分:800-1100-1700-2200-2800

AB 是水题,不写了不写了。

C Moamen and XOR

套路题,这种东西直接按位考虑。

从高到低考虑每一位,分类讨论一下:

如果我们让当前位的 \(\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

设 \(f_i\) 表示强势保留第 \(i\) 行,最多保留的行数,那么转移方程为:

\[\displaystyle f_i=\max^{i-1}_{j=1} c(i,j)(f_j+1) \]

其中 \(c(i,j)\) 表示第 \(i\) 行与第 \(j\) 行能否拼在一起。

朴素转移是 \(O(n^3)\) 的,能过有鬼了。

考虑线段树优化,对于第 \(i\) 行中被染黑的每一段,做一遍区间对 \(f_i\) 取 \(\max\),而当转移第 \(i\) 行的时候,对染黑的每一段取 \(\max\)。

这样,我们用线段树将 dp 条件与转移合在了一起,实现上需要一棵支持区间取 \(\max\),区间查 \(\max\) 的线段树,时间复杂度 \(O(n\log n)\)。

E Assiut Chess

趣题,如果下次课件我还做趣题选讲的话可能会选进来

上一篇:C++函数重载与重载原理:命名倾轧


下一篇:P1939 【模板】矩阵加速(数列)