P1824 进击的奶牛(二分)

思路:把检验的函数说一下,就是检测的距离x时,是否存在c个隔断相离大于等于x,如果是则返回1,不是则返回0

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

const int maxn = 1e5 + 10;
int a[maxn], n, c, minn=0x3f3f3f3f, ans, mid;

bool check(int x){
    int sum = 0, base = a[1];
    for (int i = 2; i <= n; ++i){
        if (a[i] - base >= x){ sum++, base = a[i]; }
        if (sum >= c)return 1;
    }
    if (sum + 1 < c)return 0;
    return 1;
}

void half(){
    int l = minn, r = a[n] - a[1];
    while (l <= r){
        mid = (l + r) >> 1;
        if (check(mid)){ l = mid + 1; }
        else r = mid - 1;
    }
    ans = r;
}

int main(){
    scanf("%d%d", &n, &c);
    for (int i = 1; i <= n; ++i)    scanf("%d", &a[i]);
    sort(a + 1, a + n + 1);
    for (int i = 2; i <= n; ++i) minn = min(minn, a[i] - a[i - 1]);
    half();        //二分
    cout << ans << endl;

}

原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/10453585.html

时间: 2024-10-10 14:11:56

P1824 进击的奶牛(二分)的相关文章

P1824 进击的奶牛

题目大意: 将c个奶牛放入n个隔间,一直隔间的坐标,问如何放才能使奶牛相邻的距离的最小值最大.(0<=xi<=1,000,000,000)(2<=N<=100,000). 思路: 显然是二分答案,主要是分好后的验证.开始我总想一个一个放看是否满足,但是极端情况下复杂度太大.实在优化不了(其实线段树应该可以优化寻找位置的过程,但太麻烦而且我也忘了),看了洛谷上的题解,其实验证的时候,只用访问一遍隔间尽量的多放牛,若最多放牛数大于c就是满足的. 1 #include<cstdio

luogu P1824 进击的奶牛

题目描述 Farmer John建造了一个有N(2<=N<=100,000)个隔间的牛棚,这些隔间分布在一条直线上,坐标是x1,...,xN (0<=xi<=1,000,000,000). 他的C(2<=C<=N)头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒.为了防止牛之间的互相打斗,Farmer John想把这些牛安置在指定的隔间,所有牛中相邻两头的最近距离越大越好.那么,这个最大的最近距离是多少呢? 输入输出格式 输入格式: 第1行:两个用空格隔开的数

洛谷 P1824 进击的奶牛 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接 :https://www.luogu.org/problem/show?pid=1824 题目描述 Farmer John建造了一个有N(2<=N<=100,000)个隔间的牛棚,这些隔间分布在一条直线上,坐标是x1,...,xN (0<=xi<=1,000,000,000). 他的C(2<=C<=N)头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒.为了防止牛之间的互相打斗,Fa

洛谷P1316 P1824

P1316 丢瓶盖 题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出格式 输入格式: 第一行,两个整数,A,B.(B<=A<=100000) 第二行,A个整数,分别为这A个瓶盖坐标. 输出格式: 仅一个整数,为所求答案. 输入输出样例 输入样例#1: 5 3 1 2 3 4 5 输出样例#1: 2 说明 限时3秒 P1824 进击的奶牛 题目描

二分查找&amp;二分答案

原创建时间:2018-02-06 16:48:20 \(O(\log_2n)\)的优秀算法 二分查找 百度百科原话 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 二分查找的时间复杂度是\(O(log_{2}n)\) 要求 查找的序列必须采用顺序存储结构 查找的序列必须是有序排列的 思路 将需要查找的序列进行排序(一般为升序排列) 将序列中间位置记录的元素与关键字比较 如果相等,则返回查

推荐题目

二分 P2678 跳石头 P2440 木材加工 P1873 砍树 P1577 切绳子 P1824 进击的奶牛 P1316 丢瓶盖 UVA1555 Garland P1257 平面上的最接近点对 P1429 平面最近点对(加强版)(未完成) P1182 数列分段"Section II" P1281 书的复制(二分做法和上题一样,只是输出值变成了输出划分方式) 递推 P2386 放苹果 P1025 数的划分 DP&&MS P1091 合唱队形 P1140 相似基因 P144

算法竞赛专题解析(1):二分法、三分法

目录 1. 二分法的理论背景 2. 整数二分模板 2.1 基本形式 2.2 STL的lower_bound()和upper_bound() 2.3 简单例题 3. 整数二分典型题目 3.1 最大值最小化(最大值尽量小 3.1.1序列划分问题 3.1.2 通往奥格瑞玛的道路 3.2 最小值最大化(最小值尽量大) 4. 实数二分 4.1 基本形式 4.2 实数二分例题 5. 二分法习题 6. 三分法求极值 6.1 原理 6.2 实数三分 6.2.1 实数三分习题 6.3 整数三分 本系列是这本算法教

一些题目(3)

埃及分数 迭代加深搜索 题意:将一个分数拆分成几个分子为 1 的分数的和.要求拆分出的个数最少. 正解:据说是黑书上的题目.思路很明确,用 ID-DFS 每次限定深度进行搜索即可. 为了使序列不重复,每次找到的分数都要比前一个分数小,即分母比前一个分数的分母大.同时要保证当前的分数加上之前的分数之和不大于题目给出的分数.这样我们就确定了每层搜索枚举的上下界.最终判断枚举出的分数序列是否满足要求时只要进行通分相加即可. ? 选举组长 哈希表或部分排序 题意:有 N 个候选人,有 M 个人参加选举,

POJ2391.Ombrophobic Bovines(不喜欢雨的奶牛)——floyd+二分+拆点+最大流

http://poj.org/problem?id=2391 写的挫的最大流会超时~~~ 题目描述: Jack 农场主的奶牛实在是太讨厌被淋湿了.决定在农场设置降雨警报,这样在快要下 雨的时候可以让奶牛们都知道.他们设置设计了一个下雨撤退计划,这样在下雨之前每头奶牛都 能躲到避雨点.然而,天气预报并不总是准确的.为了使得错误的天气预报影响尽可能小,他们 希望尽可能晚地拉响警报,只要保证留有足够的时间让所有的奶牛都能回到避雨点就可以了. 农场有F 块草地,1≤F≤200,奶牛们在草地上吃草.这些草