5 3 1 2 8 4 9
3
二分搜索+贪心
主要对所求最大的最小距离进行二分搜索,看其是否满足条件
#include <iostream> #include <algorithm> #include <vector> using namespace std; bool judge(vector<int>& x, int c, int value){ int cnt = 1,pre = x[0]; for(int i = 1; i < x.size(); ++ i){ if(x[i]-pre >= value){ cnt ++ ; pre = x[i]; } if(cnt >= c) return true; } return false; } int solve(vector<int>& x, int c){ int left = 0, right =x.back() - x.front(); while(left <= right){ int mid = (left+right)/2; if(judge(x,c,mid)) left = mid+1; else right = mid-1; } return left-1; } int main(){ int n,c; while(cin >> n >> c){ vector<int> x(n); for(int i = 0 ; i < n; ++ i) cin >> x[i]; sort(x.begin(),x.end()); cout<<solve(x, c)<<endl; } }
原文:http://www.cnblogs.com/xiongqiangcs/p/3663041.html