专栏文章
题解 CF2165C Binary Wine
CF2165C题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min1infx
- 此快照首次捕获于
- 2025/12/01 19:02 3 个月前
- 此快照最后确认于
- 2025/12/01 19:02 3 个月前
题解 CF2165C Binary Wine
题意
给定长度为 的数组 ,你可以进行若干次操作,每次花费 代价使 中的某个元素增加 。
次询问,每次给定一个 ,求使得下面条件成立的最小代价:
- 存在一个长度为 的数组 使得 ,且 。
数据范围:多测,,,值域 。
做法
按位考虑。首先一位上出现多个 显然是不优的。
考虑从高往低枚举每一位。设 的各项的这一位求和为 , 的这一位为 ,则分三种情况:
- 时,必然能拿出一个 给 的该位,同时还可以拿出另一个 则可以覆盖 的所有更低位,直接停止枚举输出答案;
- 时,必然能拿出一个 给 的该位,把该 的该位减掉放回,然后接着枚举后面的位;
- 时,拿不出一个 了,这时就需要加。而加是要代价的所以我们直接取出 里面最大的拿来加。加完了之后该 就进入第二种情况,即留下一个 。
综上,算法思路就是用一个大根堆维护前 大的 ,然后按上面三种情况讨论,其中后两种都每次取堆顶。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...