zoukankan      html  css  js  c++  java
  • 进击的奶牛

    题目描述

    Farmer John建造了一个有N(2<=N<=100,000)个隔间的牛棚,这些隔间分布在一条直线上,坐标是x1,...,xN (0<=xi<=1,000,000,000)。

    他的C(2<=C<=N)头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。为了防止牛之间的互相打斗,Farmer John想把这些牛安置在指定的隔间,所有牛中相邻两头的最近距离越大越好。那么,这个最大的最近距离是多少呢?

    输入输出格式

    输入格式:

    第1行:两个用空格隔开的数字N和C。

    第2~N+1行:每行一个整数,表示每个隔间的坐标。

    输出格式:

    输出只有一行,即相邻两头牛最大的最近距离。

    输入输出样例

    输入样例#1: 
    5 3
    1 
    2 
    8 
    4 
    9 
     
    
    输出样例#1: 
    3

    分析:
    好久没写二分答案了,今天来写几道题。本题问题是求“这个最大的最近距离是多少”,即最大值最小化,而这类问题一般都用二分答案求解。

    CODE:
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 #include <algorithm>
     5 #include <iostream>
     6 using namespace std;
     7 int n,c,a[100005];
     8 int ok(int x){
     9     int ans=1,last=1,i=2;
    10     while (i<=n){
    11         while (i<=n&&a[i]-a[last]<x) i++;
    12         if (i==n+1) break;
    13         ans++,last=i;
    14         i++;
    15     }
    16     return ans>=c;
    17 }
    18 int main(){
    19     //freopen("aggr.in","r",stdin);
    20     //freopen("aggr.out","w",stdout);
    21     scanf("%d%d",&n,&c);
    22     for (int i=1;i<=n;i++) scanf("%d",&a[i]);
    23     sort(a+1,a+1+n);
    24     int l=1,r=1000000000;
    25     while (l<=r){
    26         int mid=(l+r)/2;
    27         if (ok(mid)) l=mid+1;
    28         else r=mid-1;
    29         }
    30     printf("%d",r);
    31     return 0;
    32     }
    
    
    
     
  • 相关阅读:
    bzoj 1030 [JSOI2007]文本生成器
    Swift 学习笔记 (闭包)
    Swift 学习笔记 (函数)
    HTML 学习笔记 JQueryUI(Interactions,Widgets)
    HTML 学习笔记 JQuery(表单,表格 操作)
    HTML 学习笔记 JQuery(animation)
    HTML 学习笔记 JQuery(盒子操作)
    HTML 学习笔记 JQuery(事件)
    HTML 学习笔记 JQuery(DOM 操作3)
    HTML 学习笔记 JQuery(DOM 操作2)
  • 原文地址:https://www.cnblogs.com/kanchuang/p/11188072.html
Copyright © 2011-2022 走看看