007:Aggressive cows

描述Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...,xN (0 <= xi <= 1,000,000,000).

His C (2 <= C <= N) cows don‘t like this barn layout and become aggressive towards each other once put into a stall. To prevent the cows from hurting each other, FJ want to assign the cows to the stalls, such that the minimum distance between any two of them is as large as possible. What is the largest minimum distance?输入* Line 1: Two space-separated integers: N and C

* Lines 2..N+1: Line i+1 contains an integer stall location, xi输出* Line 1: One integer: the largest minimum distance样例输入

5 3
1
2
8
4
9

样例输出

3

提示OUTPUT DETAILS:

FJ can put his 3 cows in the stalls at positions 1, 4 and 8, resulting in a minimum distance of 3.

Huge input data,scanf is recommended.来源USACO 2005 February Gold

二分的关键

  • 二分的对象(一个单调的序列,问题的解包含在这个序列中)
  • 一个条件计算函数(计算结果有两种结果,可以将目标序列减半)
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<map>
#include<cstring>
#define DEBUG(x) cout << #x << " = " << x << endl
using namespace std;
const int maxn=1e5;
const int MAX=1e9;
int pos[maxn];
int N,C;
int feasible(int n)
{
    int cnt=1;
    int cur=pos[0];
    int i;
    for(i=1;i<N;i++){
        if(pos[i]>=cur+n){
            cur=pos[i];
            cnt++;
        }
    }
    int rt=cnt-C;
    return rt;
}
int bsearch(int lb,int rb)
{
    int lastPos=-1;
    int mid;
    while(lb<=rb){
        mid=(lb+rb)/2;
//        DEBUG(mid);
        if(feasible(mid)>=0){
            lastPos=mid;
            lb=mid+1;
        }
        else {
            rb=mid-1;
        }
    }
    return lastPos;
}
void printArray(int a[],int n)
{
    for(int i=0;i<n;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
}
int main()
{
//    freopen("in.txt","r",stdin);
    scanf("%d %d",&N,&C);
    for(int i=0;i<N;i++){
        scanf("%d",&pos[i]);
    }
    sort(pos,pos+N);
//    printArray(pos,N);
    int Rb=MAX/C;
    int Lb=1;
    printf("%d\n",bsearch(Lb,Rb));
    return 0;
}

原文地址:https://www.cnblogs.com/MalcolmMeng/p/9113745.html

时间: 2024-11-09 05:53:37

007:Aggressive cows的相关文章

最大化最小值 Aggressive cows

Aggressive cows http://poj.org/problem?id=2456 N间小屋,M头牛,使得牛跟牛之间的距离最远,以防止牛打架. 2<=N<=100000 2<=M<=N 0 <=xi<=109 ////////////////////////////////////////////////////////////// C(d):=可以安排牛的位置使得任意两头牛的间距都不小于d 使用二分搜索法解决: //参考文献:挑战程序设计大赛(第二版)/**

BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )

最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define rep( i , n ) for( int i = 0 ; i < n ; ++i ) #defin

Aggressive cows

Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...,xN

POJ 2456 Aggressive cows (二分 基础)

Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7924   Accepted: 3959 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...

POJ 2456 Aggressive cows(二分搜索最大化最小值)

Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6372   Accepted: 3181 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...

bzoj 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛

1734: [Usaco2005 feb]Aggressive cows 愤怒的牛 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...,xN (0 <= xi <= 1,000,000,000). His C (2 <= C &l

二分搜索 POJ 2456 Aggressive cows

题目传送门 1 /* 2 二分搜索:搜索安排最近牛的距离不小于d 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cmath> 7 using namespace std; 8 9 const int MAXN = 1e5 + 10; 10 const int INF = 0x3f3f3f3f; 11 int x[MAXN]; 12 int n, m; 13 14 bool check(int d)

poj 2456 Aggressive cows,二分,最大化最小值

描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000). 但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗.为了不让牛互相伤害.John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢? 输入 有多组测试数据,以EOF结束. 第

POJ 2456 Aggressive cows 【二分】

Aggressive cows 题目链接:http://poj.org/problem?id=2456 题意:有N个位置,(2 <= N <= 100,000),要在这N个位置放入C头牛(2 <= C <= N),要是牛与牛之间的最小距离最大,求这个最大可能的最小距离. 分析:显然又是一个求最大化最小值的问题,很容易找到这个题的单调性,设这个最大可能的最小距离为Ans,Ans∈(0,(Pos[N-1]-Pos[0])/(C-1) );首先对N个位置进行排序,然后在区间(0,(Pos