北大ACM2456——Aggressive cows~~二分搜索

来源:互联网 发布:淘宝优惠券采集 编辑:程序博客网 时间:2024/05/16 14:17

这一题,也是简单的二分搜索,求解放置的牛之间的距离尽可能远,也就是最大化最小值。

主要的一步就是将第i头牛放在了x[j]的位置中,第i + 1头牛就要放在满足x[j] + d < x [k]k的最小值

下面是AC的代码:

#include <iostream>#include <algorithm>using namespace std;int N, M;int X[100005];bool C(int x){int last = 0;for(int i = 1; i < M; i++){int cur = last + 1;while(cur < N && X[cur] - X[last] < x)         //满足X[last] + x > X[cur]的最小的cur。{cur++;}if(cur == N)return false;last = cur;}return true;}void solve(){sort(X, X + N);int left = 0, right = 10000000;                   //距离在0到10000000之间搜索while(left  + 1 < right)                          //二分搜索{int mid = (left + right) / 2;if(C(mid))left = mid;elseright = mid;}cout << left << endl;}int main(){while(cin >> N >> M){for(int i = 0; i < N; i++)cin >> X[i];solve();}return 0;}


0 0
原创粉丝点击