专栏文章

「YLLOI-R1-T2」圣诞星 的题解

P12413题解参与者 15已保存评论 19

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
19 条
当前快照
1 份
快照标识符
@mipv2h46
此快照首次捕获于
2025/12/03 18:25
3 个月前
此快照最后确认于
2025/12/03 18:25
3 个月前
查看原文
因为不管买哪个商品都会让其他的价格减 11,但先买贵的容易让便宜的降为 00 元,使其浪费优惠。因此按照价格从小到大购买一定最优。
现在我们已经确定了这些商品的购买顺序(之后的 a[i] 便是排序后的),那么对于商品购买的优惠券的优惠就已经确定,我们可以先把每个商品先计算出优惠后的价格。第 ii 个商品会被买前 i1i-1 个商品的优惠券优惠,即 a[i]=a[i]-i+1
接下来我们就只需要考虑一开始买多少张优惠券最优即可。只要一张优惠券能优惠的钱数大于 ww,这张优惠券就是值的,那么当价格非 00 的商品不超过 ww 时,再买优惠券就不会值了,此时停止购买。
如何求出购买多少张优惠券后价格非 00 的商品会不超过 ww 个呢?这里有两种求法。
若购买 xx 张价格非 00 的商品会超过 ww 个,则购买 x1x-1 张价格非 00 的商品也一定会超过 ww 个,可以发现这是有单调性的,因此我们可以直接二分优惠券数,求出价格非 00 的商品超过 ww 个的最大优惠券数即可,总时间复杂度 O(nlogW)\mathcal O(n\log W),其中 WWaia_i 的值域(因为当 w=1w=1 时一直买优惠券直到只剩一个价格非 00 的商品是最优的)。
再看另一种求法,因为最后剩下的价格非 00 的商品一定是价格最高的若干个,所以我们可以直接再次排序,求出价格第 nw+1n-w+1 高的价格,那么购买这么多优惠券时每张优惠券一定都是值的,并且再多买一张就不是值的了,总时间复杂度 O(nlogn)\mathcal O(n\log n)
求出购买多少张优惠券后,模拟一遍统计答案即可。

评论

19 条评论,欢迎与作者交流。

正在加载评论...