AT4720 [ABC123D] Cake 123

题意

给定三个序列,长度分别为 x,y,zx, y, z,你需要在三个序列里每个序列选一个数求和,有 xyzx \cdot y \cdot z 种和,求从大到小前 kk 个和。

解法

最暴力的做法是枚举每一种和,然后排序求前 kk 个,复杂度 O(xyzlog(xyz))O(xyz \log (xyz))

注意到 1x,y,z1031 \leq x, y, z \leq 10^3,考虑低于三次方的做法。

可以考虑先枚举前两个序列的所有和,共 xyxy 个,接下来排序后取前 kk 个和剩下的序列求和。

这个复杂度看起来也是平方的,显然当 k=xyk=xy 时,枚举的和仍然是 xyzxyz 个。

但是注意 kmin{3000,xyz}k \leq \min\{3000, xyz\},所以 kk 的上限为 30003000。可以接受。

复杂度为 O(xylog(xy))O(xy \log (xy)) 左右,可以通过。

posted @ 2022-07-29 20:00  HappyBobb  阅读(17)  评论(0)    收藏  举报  来源