专栏文章

题解:P14636 [NOIP2025] 清仓甩卖 / sale

P14636题解参与者 1已保存评论 0

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@mimyrze5
此快照首次捕获于
2025/12/01 17:46
3 个月前
此快照最后确认于
2025/12/01 17:46
3 个月前
查看原文
相信自己的做法不会有错,并不复杂。场上通过所有大样例。
首先统计是最优的肯定不好做,考虑统计不是最优的,然后用总方案数减去。
发现这种情况就是在只剩两块钱的时候,先选了价格 11 的物品 AA,后面买不了价格 22 的,只能再选一个价格 11 的物品 BB 或者没有能买的了。
这时候不一定最优,因为如果不选 AA,直接就买一个价格 22 的物品 CC 可能更优秀。
考虑枚举 AA,设为 aia_i。设 CCaka_k,则要求 ai>ak2a_i>\frac{a_k}{2},原因是我们在面临这两个物品的时候先选了 AA(性价比高)。
先将物品排序,二分得到 k[i+1,p]k\in [i+1,p]
接着枚举 BB,设为 aja_j,则有 j<ij<i,且 ai+aj<aka_i+a_j<a_k(我们要求其不优)。
现在要求预处理后,已知 i,ji,j,可以 O(1)O(1) 算出方案数。
把刚才的不等式再拿出来:ai+aj<ak<2aia_i+a_j<a_k<2a_i,发现合法区间变成 k[l,p]k\in [l,p]ll 可以双指针得到。
我们在枚举 ii 之后,可以先枚举每个 kk 对应的方案数,这里的方案数只考虑 [i+1,n][i+1,n] 的价格取值,由于已经知道 i,ki,k,可以再结合一个性质推出各个区间有多少个 11 和多少个 22,这个性质就是:单独考虑价格为 1122,选取的物品都是一个后缀。而显然,kk 是从后往前第一个没选的 22。所以就很好算了。
k=xk=x 的时候 [i+1,n][i+1,n] 的价格取值方案数为 cntxcnt_x,则求出 cntcnt 的后缀和 sufx=t=xpcnttsuf_x=\sum_{t=x}^p cnt_t 即可快速得到 k[l,p]k\in [l,p] 的方案数总和。
接下来考虑 [1,i1][1,i-1] 的价格取值方案(显然我们已经钦定了 ii11),在 [j+1,i1][j+1,i-1] 中,必须都填 22,这样才能保证选完 AAaia_i)后我们会选择 BBaja_j),而在 [1,j1][1,j-1] 中,填什么是无所谓的,所以我们的方案数就是 sufl2j1suf_l*2^{j-1}
现在似乎做完了,但是还要考虑不存在 BB 的情况(1ji1,wj=2\forall 1\le j\le i-1,w_j=2),情况类似,方案数就是 sufi+1suf_{i+1}
时间复杂度 O(n2)O(n^2)

评论

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

正在加载评论...