【Python数据结构与算法】二分法----Aggressive cows好斗的奶牛

举报
是Dream呀 发表于 2024/08/28 22:13:56 2024/08/28
【摘要】 题目:好斗的奶牛农民约翰建造了一个新的长谷仓,有 N (2 <= N <= 100,000) 个畜栏。摊位位于位置 x1,…,xN (0 <= 习 <= 1,000,000,000) 处的一条直线。他的 C (2 <= C <= N) 奶牛不喜欢这种牛舍布局,一旦被放入畜栏,它们就会变得相互攻击。为了防止奶牛互相伤害,FJ希望将奶牛分配到畜栏,以便它们中的任何两个之间的最小距离尽可能大。最...

在这里插入图片描述

题目:好斗的奶牛

农民约翰建造了一个新的长谷仓,有 N (2 <= N <= 100,000) 个畜栏。摊位位于位置 x1,…,xN (0 <= 习 <= 1,000,000,000) 处的一条直线。
他的 C (2 <= C <= N) 奶牛不喜欢这种牛舍布局,一旦被放入畜栏,它们就会变得相互攻击。为了防止奶牛互相伤害,FJ希望将奶牛分配到畜栏,以便它们中的任何两个之间的最小距离尽可能大。最大最小距离是多少。
输入

  • Line 1: Two space-separated integers: N and C

  • 第 1 行:两个空格分隔的整数:N 和 C

  • Lines 2…N+1: Line i+1 contains an integer stall location, xi

  • 第 2…N+1 行:第 i+1 行包含整数停档位置,习

输出

  • Line 1: One integer: the largest minimum distance
  • 第 1 行:一个整数:最大最小距离

样例输入

5 3
1
2
8
4
9

样例输出

3

AC代码

FJ can put his 3 cows in the stalls at positions 1, 4 and 8, resulting in a minimum distance of 3.
FJ 可以将他的 3 头奶牛放在 1、4 和 8 位置的畜栏中,最小距离为 3。

Huge input data,scanf is recommended.
输入数据量大,建议使用scanf。

N,C = map(int,input().split())
x = [] 
for i in range(N):
	x.append(int(input()))
x.sort()
def valid(d): 
	prevPos = x[0] 
	totalDone = 1  
	for i in range(1,N):
		if x[i] - prevPos >= d:
			prevPos = x[i]  
			totalDone += 1
			if totalDone == C:
				return True
	return False
L,R = 1, 1000000000//(C-1) + 1
best = 0
while L <= R:
	D = L + (R - L)//2
	if valid(D):
		best = D
		L = D + 1
	else:
		R = D - 1
print(best)

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。