Educational Codeforces Round 176 (Rated for Div. 2) A-D
A
定位为送分题,发现 \(k\) 为奇数,所以当 \(n\) 为奇数的时候可以先减一次 \(k\),之后一直减去 \(k - 1\) 直到 \(n \le k\),然后如果 \(k \gt 0\) 则加 \(1\)。
B
鉴定为猜到了结论但是自己用特殊情况证伪了自己又重新证伪了证伪我的特殊情况的证明。
坏了好神经
说回来,我们发现 \(k = 1\) 的情况有点特殊,所以我们先不去考虑它,然后,我们发现,可以构造一种方法,使得前 \(k + 1\) 大的数都能被取到。而对于 \(k = 1\) 的情况,答案为 \(\max \{ a _ 1 + a _ n, \max {a _ i} + \max \{ a _ 1 ,a _ n\} \}\),两种结合一下就好了。
C
过了 C 却没过 B,读题读错导致没理解到题目意思卡了半天,因为我们只能用两种颜色涂栅栏,并且不能在一种颜色中间用另一种颜色,所以只能是左边是一段右边是一段。设左边的长度为 \(x\),则右边的长度为 \(n - x\),这是显然的。我们记 \(cnt _ x\) 表示 \(a _ i \ge x\) 的染料的个数,则我们的答案就是 \(cnt _ x \times cnt _ {n - x}\)。
但是这有一个问题,我们可能会选到相同颜色的,所以我们对于每个 \(x\),减去 \(\min \{ cnt _ x,cnt _ {n - x} \}\) 即可。
D
赛后看题解补的。
我们发现,我们可以将除以 \(2 ^ k\) 看作右移 \(k\) 位,并且不能移动相同的距离,这就很像一个 \(01\) 背包,并且值域不大,可以考虑预处理 \(01\) 背包的所有情况。
我们设 \(dp _ {i,j}\) 表示 \(A\) 右移 \(i\) 位,\(B\) 右移 \(j\) 位的最小代价,则我们可以用以下方式预处理:
然后,考虑 \(A\) 和 \(B\) 的所有公共前缀,则答案为 \(\min \{ dp _ {m,n} \}\),其中 \(m,n\) 是除去公共前缀后 \(A,B\) 的剩余长度。