POJ 2456 (二分查找)

    xiaoxiao2021-03-25  148

    题意: 将m头牛放到n个牛棚中,如何使它们的间距最大。每个牛棚有对应的位置。

    思路:二分法总能够暴力查找出答案,注意点就是如何check,这个需要一定的仔细。

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; typedef long long LL; LL a[100005]; int n,c; int check(int d) { int last = 0; for(int i = 1;i < c; i++) { int cnt = last + 1; while(cnt < n && a[cnt] - a[last] < d) cnt++; if(cnt == n) return false; last = cnt; } return true; } int main() { //freopen("in.txt","r",stdin); scanf("%d%d",&n,&c); for(int i = 0;i < n; i++) scanf("%lld",&a[i]); sort(a,a+n); int l = 0,r = INF; while(r - l > 1) { int mid = (l + r)/2; if(check(mid)) l = mid; else r = mid; } printf("%d\n",l); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-40902.html

    最新回复(0)