Codeforces Round 1064 (Div. 2) VP总结

比赛链接

Result

image

很 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

code

E - Binary Wine

考虑如何快速判断一个 \(a\) 是否是好序列:

从大到小枚举二进制位,我们有:

  • \(a\) 中所有数在这个位为 \(1\) 的数量大于 \(c\) 当前位的值,则我们可以直接用这些数拼出 \(c\) 的剩余位,直接 break 即可
  • 如果当前位没有 \(1\)\(c\) 当前位为 \(1\),则我们必须将某个 \(a_i\) 增加到当前位为 \(1\)
  • 如果当前位只有 \(1\)\(1\)\(c\) 的当前位也是 \(1\),则把这意味去掉,继续求解

在修改时,贪心地修改最大数即可。由于每一位至多修改一个数,我们只需要考虑最大的 \(30\) 个数就行了

code

posted @ 2025-11-22 14:05  BluemoonQwQ  阅读(6)  评论(0)    收藏  举报