1. 程式人生 > >【POJ】2456Aggressive cows

【POJ】2456Aggressive cows

之間 include 如果 org AI poj sort code gre

http://poj.org/problem?id=2456

思路:這是一個最小值最大化的問題。先對隔間編號從小到大排序,則最大距離不會超過兩端的兩頭牛之間的差值,最小值為0。所以我們可以通過二分枚舉最小值來求。假設當前的最小值為x,如果判斷出最小差值為x時可以放下C頭牛,就先讓x變大再判斷;如果放不下,說明當前的x太大了,就先讓x變小然後再進行判斷。直到求出一個最大的x就是最終的答案。

#include<stdio.h>
#include<algorithm>
using namespace std;
const int N = 100005;
int a[N], n, c;

bool judge(int x) { int cnt = 1, tmp = a[0]; for(int i = 1; i < n; i++) { if(a[i] - tmp >= x) { cnt++; tmp = a[i]; if(cnt >= c) //可以放下C頭牛 return true; } } return false; } int get_ans() //
二分搜索最小值 { int l = 0, r = a[n-1] - a[0]; while(l <= r) { int mid = (l + r) / 2; if(judge(mid)) l = mid + 1; else r = mid - 1; } return l - 1; } int main() { while(~scanf("%d%d",&n,&c)) { for
(int i = 0; i < n; i++) scanf("%d",&a[i]); sort(a, a+n); printf("%d\n",get_ans()); } return 0; }

【POJ】2456Aggressive cows