CF1343D Constant Palindrome Sum 题解

也许更好的阅读体验

CF题目传送门

打比赛的时候这道题没想出来,等到想出来的时候比赛结束了…… q w q qwq qwq

下面进入正题:(前一部分我会复盘我的思路过程供大家参考,当然这是一个蒟蒻的思考过程, 大家完全可以跳过)


首先拿到题目,先想了下能否贪心,发现找不到贪心策略。毫无头绪,我开始尝试寻找突破口。这时我发现题目有一点比较奇怪:题目给了 k k k 的范围还保证 ∑ k ≤ 2 × 1 0 5 \sum k \leq 2 \times 10^5 k2×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+ani1=x
中的 x ( 2 ≤ x ≤ 2 k ) x(2 \le x \le 2k) x(2x2k),算出每一对数需要替换多少个数,最后在所有的结果中取 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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值