专栏文章

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

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

文章操作

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

当前评论
1 条
当前快照
1 份
快照标识符
@mimyt788
此快照首次捕获于
2025/12/01 17:46
3 个月前
此快照最后确认于
2025/12/01 17:46
3 个月前
查看原文
赛时花费 3h+3\text{h}+ 通过大样例,自造数据 1.07s1.07\text{s},希望别死。
设确定 ww 后,从大到小排序后的 aiwi\frac{a_i}{w_i} 数组为 bb,不妨设 bib_i 对应的就是 ai,wia_i,w_i
观察一个不合法的情况,形如取了一个前缀到 bxb_x 之后,还剩 11 块钱,然后遇到几个 wz=2w_z=2 取不到,然后再遇到一个 wy=1w_y=1 刚好把 11 块钱用完(可能不存在 yy)。这里,如果 ax+ay<aza_x+a_y<a_z,那么把 x,yx,y 换为 zz 就是更优的,这时候就不合法了。
然后一个自然的想法是,枚举 x,y,zx,y,z,算出方案数 calc(x,y,z)\text{calc}(x,y,z),然后省掉其中一维就可以做到 O(n2)\mathcal{O}(n^2)
这个 calc(x,y,z)\text{calc}(x,y,z) 实在是非常难算!
首先可以钦定,zz 为从左到右第一个满足 calc(x,y,z)0\text{calc}(x,y,z)\neq 0zz,以方便去重。
需要计算的方案数可以分成三部分:[1,z1],[z+1,y1],[y+1,n][1,z-1],[z+1,y-1],[y+1,n],显然 wz=2,wx=wy=1w_z=2,w_x=w_y=1
先考虑 [1,z1][1,z-1] 部分,我们需要求出为 [1,z1][1,z-1] 所有数确定 ww 的方案数,使得按照原策略取时,恰好在 zz 所在的位置剩下 11 块钱。由于 xx 是除了 yy 之外最后一个被取到的 w=1w=1xxzz 部分的 ww 必须为 22
[1,z1][1,z-1] 中的点实际上有两类:一种是 w=2w=2 时仍然在 zz 前面的点,这样的点形成一个前缀,另一种是 w=2w=2 时跳出 zz 的点。
大概长这样(有点丑见谅),对于第一种点,其对 mm 的减量为 1122,对于第二种点,其对 mm 的减量为 0011。设对于 [1,z][1,z] 而言,这两种点的数量分别为 c1,z,c2,zc_{1,z},c_{2,z}
ai,ai2a_i,\frac{a_i}2 放一起排个序,统计前缀有多少个 aia_i 多少个 ai2\frac{a_i}2 即可得到 c1,i,c2,ic_{1,i},c_{2,i}
下面一步非常重要:不妨设 mm 已经减掉了 c1,zc_{1,z} 这样两种点就本质上相同了,只需要再选任意 mc1,z2m-c_{1,z}-2 个点即可(忽略了 xx 的贡献,所以是 2-2),注意 [x+1,z1][x+1,z-1] 范围内的点只能选择贡献为 00,所以实际上是从 c1,x1+c2,x11c_{1,x-1}+c_{2,x-1}-1(忽略 zz)个点中选,于是方案数 (c1,x1+c2,x11mc1,z2)\binom{c_{1,x-1}+c_{2,x-1}-1}{m-c_{1,z}-2}
接下来考虑 [z+1,y1][z+1,y-1] 部分,这个部分只有 w=2w=2,要求所有在其中的点都 w=2w=2 即可,没有贡献。
最后是 [y+1,n][y+1,n] 部分,这个部分包含了跳过来的 w=2w=2,这些点没有贡献,以及 w=1,2w=1,2 时都会在这个部分的点,这样的点可以任选 w=1w=1w=2w=2,每个点有 22 的贡献,这样的点的数量可以通过与前文类似的方式求出,设为 dyd_y,则方案数 2dy2^{d_y}
于是得到 calc\text{calc} 的表达式。
calc(x,y,z)=(c1,x1+c2,x11mc1,z2)2dy\boxed{\text{calc}(x,y,z)=\binom{c_{1,x-1}+c_{2,x-1}-1}{m-c_{1,z}-2}2^{d_y}}
直接枚举满足 ax+ay<az,ax<az2<aya_x+a_y<a_z,a_x<\frac {a_z}2<a_yx,y,zx,y,z 可以做到 O(n3)\mathcal{O}(n^3)。注意处理相等的情况。
注意到对于一对 x,zx,z,合法的 yy 形如一个后缀,同时随着 axa_x 的增加,yy 的变化也是单调的,于是可以在枚举 x,zx,z 时用一个指针维护 yy 的边界,再预处理出 2dy2^{d_y} 的后缀和,可以做到 O(n2)\mathcal{O}(n^2)

评论

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

正在加载评论...