湖南省2017省赛A题

题目大意,给你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,然后直接递推即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值