2021 牛客多校第一场 G.Game of Swapping Numbers

题目

题意

给出两个长度为 n n n 的序列 A , B A, B A,B, 恰好交换 A A A 中的两个数 k k k 次, 使得 ∑ i = 1 n ∣ A i − B i ∣ \sum_{i=1}^n \mid A_i - B_i \mid i=1nAiBi 最大.

2 ≤ n ≤ 5 × 1 0 5 , 0 ≤ k ≤ 1 0 1 8 , − 1 0 8 ≤ A i , B i ≤ 1 0 8 2 \le n \le 5 \times 10^5, 0 \le k \le 10^18, -10^8 \le A_i, B_i \le 10^8 2n5×105,0k1018,108Ai,Bi108

题解

首先有一个很重要的贡献转换, 考察 min ⁡ A i − B i ∣ \min A_i - B_i \mid minAiBi 这个式子, 如果 A i > B i A_i > B_i Ai>Bi, 那么 A i A_i Ai 对答案的贡献是 + A i +A_i +Ai, B i B_i Bi 对答案的贡献是 − B i -B_i Bi; 如果 A i < B i A_i < B_i Ai<Bi, 那么 A i A_i Ai 对答案的贡献是 − A i -A_i Ai, B i B_i Bi 对答案的贡献是 + B i +B_i +Bi. 这样可以知道, 两个序列里的数, 对答案的贡献要么是正的自己, 要么是负的自己, 这样就把本身"绑在一起"的 A i , B i A_i, B_i Ai,Bi 贡献"分开"了. 同时还需要满足的条件是正的符号个数等于负的符号个数, 都等于 n n n. 不考虑次数限制, 相当于给这 2 n 2n 2n 个数分配正负号各 n n n 个, 使得他们的和最大. 所以排序, 最大的 n n n 个正号, 剩下 n n n 个负号即可.

把最优的符号分配方案放到原来的顺序上看, 每个位置 i i i 上的两个数可能是如下情况:

-++-
+-+-

其中第一第二就是最优的了, 而第三第四, 即 ++--, 交换以后才是更优的. 由于正负号个数相等的性质, ++-- 的个数是相等的, 所以可以交换, 使得全部变成 +--+.

现在再来考虑恰好 k k k 次交换的限制.

n > 2 n > 2 n>2 时, 根据鸽子原理, 一定有 2 2 2 个相同的符号. 让他们交换, 不会改变答案. 所以恰好 k k k 次在 n > 2 n > 2 n>2 的情况下是至多 k k k 次. n = 2 n = 2 n=2 特判, 不再考虑.

接下来的问题是, 交换哪些更优? 稍微推一下:

假设 i i i 位置最优贡献是两个 +, 更大的原本对答案的贡献依然是+, 更小的原本对答案的贡献是-, 和某个 - 交换后对答案的贡献是+. 也就是说, 对于 i i i 这个位置, 交换能够使答案增加 2 min ⁡ A i , B i 2 \min \\{ A_i, B_i \\} 2minAi,Bi

对于两个 - 也这样考虑, 交换能够使答案增加 − 2 max ⁡ A j , B j = 2 min ⁡ − A j , − B j -2 \max \\{ A_j, B_j \\} = 2 \min \\{-A_j, -B_j\\} 2maxAj,Bj=2minAj,Bj

他们是独立的, 所以只需要确定两个数的符号, 然后看看需不需要交换, 如果需要, 看看是+还是-, 分开排序, 取最大即可.

复杂度 O ( n log ⁡ n ) O(n \log n) O(nlogn)

代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值