Aggressive cows~~二分搜索

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

主要的一步就是将第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;}

不畏不惧,不言不弃,冲破风雨的阻隔,黎明就在前方!

Aggressive cows~~二分搜索

相关文章:

你感兴趣的文章:

标签云: