CF1851D Prefix Permutation Sums 题解
Elairin176 · · 题解
传送门
思路好想,但是代码量不少。
题意
我们定义“前缀和排列”为:如果
现在有一个长度为
解法
我们定义
我们易知,一个普通的“前缀和排列”的差分数组必然就是这个排列。
所以我们建一个桶来记录
- 如果
b_i 已经出现过,那么这个b_i 应为两个数的和,把它记录下来。 - 如果
b_i 不属于[1,n] 的范围,那么它也是两个数的和,也把它记录下来。 - 如果记录了多于一个数,那么就不能通过补全得到“前缀和排列”。
那么我们最后只要判断记录的数字是否等于丢下的两个数字即可。这里有特殊情况:没有记录的数字。这种情况我们需要判断桶里的数是否是正好
时间复杂度为
CODE