1、简单描述
有n个不连续的格子,每一个格子对应一个位置坐标,将c头牛分别放入不同的格子中,尽可能地使牛的距离相隔远,求在不同放法中最小距离的最大值。
2、思路
# include <iostream>
# include <algorithm>
using namespace std;
int N, C, node[100001];
bool Search(int x)
{
int last = node[1], m = 1;
for(int i = 2; i <= N; i++)
{
if(node[i] - last >= x)
{
last = node[i];
m++;
}
if(m >= C)
return true;
}
return false;
}
int main()
{
cin >> N >> C;
for(int i = 1; i <= N; i++)
{
cin >> node[i];
}
sort(node + 1, node + N + 1);
int l = node[1], r = node[N];
while(l + 1 < r)
{
int mid = (l + r) / 2;
if(Search(mid))
l = mid;
else
r = mid;
}
cout << l << endl;
return 0;
}
二分查找
一开始的时候细节没注意到,如果为3和4,while(l<r)会进入死循环。
提交时显示超时,将cin改为scanf,提高速度。