P6831 [IOI 2020] 嘉年华奖券
P6831\(\mathbf{} \begin{Bmatrix} \frac{{\Large LUOGU_P6831} }{{\color{Red}\Large Solution} }\mathbf{} {No.34} \end{Bmatrix}\times{}\) NeeDna
题意
给你一个 \(nm\) 个奖券形如 \(x_{n,m}\),现在共有 \(k\) 次操作,每次操作如下:
- 从每一行选出一张奖券,构成一个序列 \(a\)。
 - 抽奖人员选出一个数 \(b\),你的奖励数额是 \(\sum^{n}_{i=1}|a_i-b|\),抽奖人员会最小化你的奖励。
 - 丢弃你所选的奖券。
 
最大化你的收益。
分析
我们拿到这种性质题,先不要着急做,先模拟题意再分析一点平凡的性质:
- 抽奖人员必然最小化,等价于选出中位数,也就是说你选的数字一半大于中位数,一半小于中位数。
 - \(abs\) 也就能拆了,因为我们知道了大小,我们把所选的数从大到小排序:\(sum=\sum^{\frac{n}{2}}_{i=1}a_i-\sum^{n}_{i=\frac{n}{2}+1}a_i\)。
 
题解
我们来确定一下这个游戏的上界:
假如我们有 \(m=k\) ,我们来看一下。我们用上面的式子看一下,我们肯定希望从大到小排序后前 \(\frac{n}{2}\) 分在第一个 \(\sum\) 里面,小的放在第二个 \(\sum\) 里面。对于每一次操作,我们把前 \(\frac{n}{2}\) 个染成黑的,后 \(\frac{n}{2}\) 个染成白的,就是选出选出 \(\frac{n}{2}\) 行黑 \(\frac{n}{2}\) 行白的。
这里有一个结论上界是一定取的到的。我们来证明一下:
- 至少有 \(\frac{n}{2}\) 行存在白的,因为白的有 \(\frac{nk}{2}\) 个。
 - 至少有 \(\frac{n}{2}\) 行存在黑的,因为黑的有 \(\frac{nk}{2}\) 个。
 
所以我们做一次操作一定可以选出来 \(\frac{n}{2}\) 行黑 \(\frac{n}{2}\) 行白的。
我们把操作一次之后黑的和白的点个数依旧一样,所以上述结论依然存在,所以我们可以一直按照上界做下去,所以最终我们一定取的到上界。
假如 \(m\ge k\) :我们可以依旧可以看成染点,但是我们选不完,所以我们要更进一步优化。
我们先把每行从大到小排序,然后把最小的 \(k\) 个选出来然后把大小全部剪掉,因为式子是这么写的。现在我们要调整 \(\frac{n}{2}\) 个点出来,我们观察一下式子 \(sum=\sum^{\frac{n}{2}}_{i=1}a_i-\sum^{n}_{i=\frac{n}{2}+1}a_i\) 我们现在是把小的点替换成大的点,所以对于每一行的替换操作我们一次操作的贡献是 \(\large a_{\text{染色}}+a_{\text{同行未染色}}\)。我们要同时最大化染了色的点和没有染色的点,所以我们把每一行最大的染色的和没染色的点选出来,放到堆里,每次选出最大的计入贡献,然后把同行的次大的加入堆中,这样操作 \(\frac{nm}{2}\) 次就做完了。
总时间复杂度是 \(O(nm\log m)\)。

                
            
        
浙公网安备 33010602011771号