专栏文章
P14636 [NOIP2025] 清仓甩卖 题解
P14636题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mimxgcgm
- 此快照首次捕获于
- 2025/12/01 17:08 3 个月前
- 此快照最后确认于
- 2025/12/01 17:08 3 个月前
合法的方案数并不好求,因此考虑正难则反,计算不合法的方案数。
首先尝试刻画一下不合法的条件。显然,如果小 R 购买的糖果是按照性价比排序后的一段前缀,则他买到的糖果一定是最优的;因此,我们只需要考虑中间有一些糖果因为买不起而没有买的情况。设:
- 小 R 在只剩下恰好一元钱前,购买的最后一颗满足 的糖果为 (其性价比为 );
- 小 R 在只剩下恰好一元钱后,遇到的第一颗满足 的糖果的编号为 (其性价比为 );
- 小 R 在只剩下恰好一元钱后,遇到的第一颗满足 的糖果的编号为 (其性价比为 );特殊地,若不存在糖果 ,则认为 ,其原价 等于 ;
则小 R 会先购买糖果 ,再购买若干满足 的糖果,并在只剩下恰好一元钱时遇到糖果 ;由于小 R 买不起糖果 ,他只能被迫购买糖果 。
显然,当 时,购买糖果 是比购买糖果 和糖果 更优的,这种定价方案并不能使小 R 买到的糖果的原价总和最大。于是,我们只需要计算满足 的方案数即可。
显然,当 时,购买糖果 是比购买糖果 和糖果 更优的,这种定价方案并不能使小 R 买到的糖果的原价总和最大。于是,我们只需要计算满足 的方案数即可。
我们将所有糖果按照原价从大到小排序,并将此时的下标作为糖果的编号。考虑枚举 和 (),设 为最大的满足 的正整数, 为最大的满足 的正整数,则有下面的要求:
- 对于 , 可以等于 或 ;
- 对于 , 需要等于 ;
- 对于 , 可以等于 或 (若 则它会被放在 前面,若 则它会被放在 后面);
- 对于 , 需要等于 ;
- 对于 , 需要等于 ,因为如果 的话糖果 就不是剩下恰好一元钱前购买的最后一颗糖果了;
- 对于 , 需要等于 ,因为如果 的话糖果 就不满足 了;
- 对于 , 可以等于 或 ,因为它们都可以作为糖果 。
同时,设 中满足 的 有 个, 中满足 的 有 个,为了使遇到糖果 时剩下恰好一元钱,需要满足 (加 是因为还要买糖果 )。
对于 前面的糖果,相当于要从 颗糖果里选 颗,让它们的贡献加 ,一共有 种方案;对于 后面的糖果, 中的每颗糖果都有两种方案,方案数为 ;将两部分相乘,可以得到此时的方案数为 。
于是我们只需要枚举 和 ,利用双指针求出 的值,计算出方案数并相加即可。
时间复杂度 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...