熊神学长昨天讲课讲了用二分法做给牛找牛棚那题,今天找到了题目并过啦
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int n, an[500000], c;
int judge(int mid)
{
int i;
int temp; //存储最右边的牛棚
int cows; //存储已经找到牛棚的牛个数
temp = an[0];
cows = 1;
for (i = 0; i < n; i++)
{
if (an[i]-temp >= mid)
{
temp = an[i]; //找到小于mid的牛棚
cows++;
}
if (cows >= c)
return 1;
}
return 0;
}
int ans()
{
int l, r;
l = 0;
r = an[n - 1];
int mid;
while (l <= r)
{
mid = (l + r) >>1;
// cout << l <<" "<<mid<< " " << r << endl;
if (judge(mid) == 1)
{
l = mid + 1;
}
else
r = mid - 1;
// cout <<" "<< l << " " << mid << " " << r << endl;
}
return l-1 ;
}
int main()
{
while (scanf("%d", &n)!=EOF)
{
scanf("%d", &c);
for (int i = 0; i < n; i++)
scanf("%d", &an[i]);
sort(an, an + n);
printf("%d\n", ans());
}
return 0;
}