對兩頭牛之間的最大間距進行二分,在judge函數(shù)里不斷的用lower_bound去尋找當(dāng)前牛的下一頭牛放置的最近位置,最后判斷能否放下c頭牛,可以的話left=mid,否則right=mid,最終輸出left文章來源地址http://www.zghlxwxcb.cn/news/detail-688403.html
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
ll arr[100007], inf = 0x3f3f3f3f3f3f3f3f;
int n, c;
void input()
{
scanf("%d%d", &n, &c);
for (int i = 0; i < n; i++)
{
scanf("%lld", &arr[i]);
}
sort(arr, arr + n);
arr[n] = inf;
}
bool judge(ll mid)
{
int count = 1;
int next = 0;
while (next < n && count < c)
{
next = lower_bound(arr, arr + n + 1, arr[next] + mid) - arr;
if (next != n)
{
count++;
}
}
return count >= c;
}
void binarySearch()
{
ll left = -1, right = arr[n - 1] - arr[0] + 1;
while (left + 1 < right)
{
ll mid = (left + right) / 2;
if (judge(mid))
{
left = mid;
}
else
{
right = mid;
}
}
printf("%lld\n", left);
}
int main()
{
input();
binarySearch();
return 0;
}
文章來源:http://www.zghlxwxcb.cn/news/detail-688403.html
到了這里,關(guān)于POJ 2456 Aggressive cows 二分搜素的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!