Aggressive cows POJ - 2456 (二分---最小化最大值)

题目

二分距离
判断条件就是从一开始每发现一个>=d时放一头牛,如果能全部放完l=mid,否r=mid-1,mid=(l+r+1)/2。

	#include<iostream>
	#include<cmath>
	#include<iomanip>
	#include<algorithm>
	using namespace std;
	typedef long long ll;
	const int Max = 1e6 + 5;	
	double lst[Max];
	int n, m, x;
	int check(int d)
	{
    
    
		int last = 1, g = 2;
		for (int i = 2;i <= m;i++)
		{
    
    
			while (lst[g] - lst[last] < d&&g<=n)g++;
			if (g > n)return 0;
			last = g++;
		}
		return 1;
	}

	int main()
	{
    
    
		cin >> n >> m;
		for (int i = 1;i <= n;i++)cin >> lst[i];
		int l = 0, r = 1e9;
		sort(lst + 1, lst + 1 + n);
		while (l < r)
		{
    
    
			int mid = (l + r + 1) / 2;
			if (check(mid)) l = mid;
			else r = mid - 1;
		}
		cout << l << endl;
	}

猜你喜欢

转载自blog.csdn.net/asbbv/article/details/114447229