题目大意,给你n个数,要求你给出任意一个排列,要求一个数与左右的数的差值的绝对值大小大于d。
直接递推,设第一个数为a,则第二个数显然最大为n,那么可以推出a = n - d - 1,第三个数为a - 1,第四个数为a + d。
以此可递推出第i个数大小为,分奇偶性,i为奇数时,其为a - (i - 1) / 2,偶数时,a + d - (i - 4) / 2。
考虑到一点,这样递推保证了奇数位的数不同,偶数位的数不同,但可能出现如下情况:
a - (i - 1) / 2 = a +d-(j - 4) / 2,此时d = (j - i - 3) / 2,此时只需d = 1,n= 6,i为1,j为6时,第1个数和第6个数都为4,显然这会出现重复的情况,
由于n个数存在这样的排列方式时,d是有限制的,可以容斥证明,d最大为 n / 2 - 1,那么对于d更小的情况,我们便只要找出最大的d满足的排列方式即可。
那么此时我们再回到递推式,当n为奇时,有n / 2 + 1个奇数,此时,由于i为奇数时,其值时不断减小,那么我们就要保证第n个数为1,由于存在n / 2 + 1个
数,那么按照递推式,第n个数必定为a - n / 2,且保证a - n / 2 = 1,那么a = n / 2 + 1,n为偶数时,有n / 2个奇数,此时我们要保证第n - 1个数为1,
那么就相当于,a - n / 2 + 1 = 1,a = n / 2,由此我们可以分类讨论,当d >= n / 2时,直接输出-1,否则把d = n / 2 - 1,然后直接递推即可。