打比赛的时候这道题没想出来,等到想出来的时候比赛结束了…… q w q qwq qwq
下面进入正题:(前一部分我会复盘我的思路过程供大家参考,当然这是一个蒟蒻的思考过程, 大家完全可以跳过)
首先拿到题目,先想了下能否贪心,发现找不到贪心策略。毫无头绪,我开始尝试寻找突破口。这时我发现题目有一点比较奇怪:题目给了 k k k 的范围还保证 ∑ k ≤ 2 × 1 0 5 \sum k \leq 2 \times 10^5 ∑k≤2×105。这就在暗示我们复杂度正常情况下应该含有 k k k(大部分题目还是没有废话的)。
接下来我观察到因为所有的数(初始的和替换的)都在 [ 1 , k ] [1,k] [1,k] 内,所以每一对数的和一定在 [ 2 , 2 k ] [2,2k] [2,2k] 内。
那么我们不妨考虑枚举题目中要求的等式
a i + a n − i − 1 = x a_i + a_{n-i-1} = x ai+an−i−1=x
中的 x ( 2 ≤ x ≤ 2 k ) x(2 \le x \le 2k) x(2≤x≤2k),算出每一对数需要替换多少个数,最后在所有的结果中取 min \min min,时间复杂度为 O ( n k ) O(nk) O(nk)。
但是这样会 TLE \texttt{TLE} TLE,为了不超时,基于枚举 x x x 的算法思想,时间复杂度要么 O ( k log n ) O(k \log n) O(klogn) 要么 O ( k + n ) O(k+n) O(k+n)。
首先我想出了一个解法,然而很遗憾是错的。这个想法是这样的(不想看的可以跳过):
把每一对数的总和进行排序,然后把所有的总和分成 s u m < x , s u m = x , s u m > x sum<x,sum=x,sum>x sum<x,sum=x,sum