Aggressive cows

题目: 

 

Aggressive cows ( POJ No.2456 )

农夫约翰搭了一间有N间牛舍的小屋。牛舍排在一条线上,第i号牛舍在x的位置。但是他的M头牛对小屋很不满意,因此经常互相攻击。约翰为了防止牛之间互相伤害,因此决定把每头牛都放在离其他牛尽可能远的牛舍。也就是要最大化最近的两头牛之间的距离。

①限制条件

●2≤N≤100000

●2≤M≤N

●0≤xi≤10^9

 

输入


N=5

M= 3

x= {1,2,8,4,9}


输出


3 (在位置1, 4, 9的牛舍中放入三头牛)


分析:

类似的最大化最小值或者最小化最大值的问题,通常用二分搜索法就可以很好地解决。我们定义

Cmp(d):=判断是否所有牛的位置使得最近的两头牛的距离不小于d

那么问题就变成了求满足Cmp(d)的最大的d。另外,最近的间距不小于d也可以说成是所有牛的间距都不小于d,因此就有

C(d)=可以安排牛的位置使得任意的牛的间距都不小于d

这个问题的判断使用贪心法便可非常容易地求解。

■对牛舍的位置x进行排序

■把第一头牛放入x的牛舍

■如果第i头牛放入了x的话,第i+1头牛就要放人满足x+d≤x的最小的x中

对x的排序只需在最开始时进行一次就可以了, 每一次判断对每头牛最多进行一次 处理,因此复杂度是0(N)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大章鱼(张文哲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值