Codeforces Round 1064 (Div. 2) VP总结
Result

很 normal 的场和很 normal 的表现,但是出题人是猫娘喵
前面 3 题不想写了,感觉 C 题比较傻逼,比 B 简单。D 和 E 是好题,F 不会做
Solution
D - Marble Council
对于每一个不在最终的 \(S\) 中的 \(x\),我们要考虑如何让 \(x\) 在所有集合中都不是唯一的众数。令 \(cnt_x\) 为 \(x\) 出现的次数
显然在一个集合中只要存在一个 \(c\) 使得 \(c\) 的出现次数大于等于 \(x\) 的出现次数则可以把 \(x\) 删掉。那么对于每个集合考虑,易得当且仅当 \(cnt_x\le \sum\limits_{c\in S}cnt_c\) 即可满足条件
那么题目转化为求 \(max\{cnt\}\le \sum\limits_{c\in S}cnt_c\) 的方案数并特判最后一个数是否被选中即可,简单背包 DP
E - Binary Wine
考虑如何快速判断一个 \(a\) 是否是好序列:
从大到小枚举二进制位,我们有:
- \(a\) 中所有数在这个位为 \(1\) 的数量大于 \(c\) 当前位的值,则我们可以直接用这些数拼出 \(c\) 的剩余位,直接
break即可 - 如果当前位没有 \(1\) 且 \(c\) 当前位为 \(1\),则我们必须将某个 \(a_i\) 增加到当前位为 \(1\)
- 如果当前位只有 \(1\) 个 \(1\) 且 \(c\) 的当前位也是 \(1\),则把这意味去掉,继续求解
在修改时,贪心地修改最大数即可。由于每一位至多修改一个数,我们只需要考虑最大的 \(30\) 个数就行了

浙公网安备 33010602011771号