专栏文章
「YLLOI-R1-T2」圣诞星 的题解
P12413题解参与者 15已保存评论 19
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 19 条
- 当前快照
- 1 份
- 快照标识符
- @mipv2h46
- 此快照首次捕获于
- 2025/12/03 18:25 3 个月前
- 此快照最后确认于
- 2025/12/03 18:25 3 个月前
因为不管买哪个商品都会让其他的价格减 ,但先买贵的容易让便宜的降为 元,使其浪费优惠。因此按照价格从小到大购买一定最优。
现在我们已经确定了这些商品的购买顺序(之后的
a[i] 便是排序后的),那么对于商品购买的优惠券的优惠就已经确定,我们可以先把每个商品先计算出优惠后的价格。第 个商品会被买前 个商品的优惠券优惠,即 a[i]=a[i]-i+1。接下来我们就只需要考虑一开始买多少张优惠券最优即可。只要一张优惠券能优惠的钱数大于 ,这张优惠券就是值的,那么当价格非 的商品不超过 时,再买优惠券就不会值了,此时停止购买。
如何求出购买多少张优惠券后价格非 的商品会不超过 个呢?这里有两种求法。
若购买 张价格非 的商品会超过 个,则购买 张价格非 的商品也一定会超过 个,可以发现这是有单调性的,因此我们可以直接二分优惠券数,求出价格非 的商品超过 个的最大优惠券数即可,总时间复杂度 ,其中 为 的值域(因为当 时一直买优惠券直到只剩一个价格非 的商品是最优的)。
再看另一种求法,因为最后剩下的价格非 的商品一定是价格最高的若干个,所以我们可以直接再次排序,求出价格第 高的价格,那么购买这么多优惠券时每张优惠券一定都是值的,并且再多买一张就不是值的了,总时间复杂度 。
求出购买多少张优惠券后,模拟一遍统计答案即可。
相关推荐
评论
共 19 条评论,欢迎与作者交流。
正在加载评论...