P1824 进击的奶牛

题目大意:

将c个奶牛放入n个隔间,一直隔间的坐标,问如何放才能使奶牛相邻的距离的最小值最大。(0<=xi<=1,000,000,000)(2<=N<=100,000)。

思路:

显然是二分答案,主要是分好后的验证。开始我总想一个一个放看是否满足,但是极端情况下复杂度太大。实在优化不了(其实线段树应该可以优化寻找位置的过程,但太麻烦而且我也忘了),看了洛谷上的题解,其实验证的时候,只用访问一遍隔间尽量的多放牛,若最多放牛数大于c就是满足的。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4
 5 using namespace std;
 6
 7 int n,c,a[1000006],l,r;
 8
 9 bool judge(int x)
10 {
11     int cnt=0,tem;
12     cnt++;
13     tem=a[1];
14     for(int i=2;i<=n;i++)
15     {
16         if(a[i]-tem>=x)
17         {
18             cnt++;
19             tem=a[i];
20         }
21     }
22     if(cnt>=c)return true;
23     else return false;
24 }
25
26 int main()
27 {
28     scanf("%d%d",&n,&c);
29     for(int i=1;i<=n;i++)scanf("%d",&a[i]);
30     sort(a+1,a+1+n);
31     l=a[1];r=a[n];
32     while(l+1<r)
33     {
34         int mid=(l+r)/2;
35         if(judge(mid))l=mid;
36         else  r=mid;
37     }
38     printf("%d\n",l);
39     return 0;
40 } 

/***********不明白普及-是什么概念,感觉比提高还难。(可能我对二分本身就不熟悉吧,记得以前做这题的时候好像就看了题解)************/

原文地址:https://www.cnblogs.com/LiqgNonqfu/p/9746611.html

时间: 2024-11-13 05:19:29

P1824 进击的奶牛的相关文章

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

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, b

洛谷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 进击的奶牛 题目描

推荐题目

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

二分查找&amp;二分答案

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

算法竞赛专题解析(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 整数三分 本系列是这本算法教

饥饿的奶牛(洛谷 1868)

题目描述 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有N个区间,每个区间x,y表示提供的x~y共y-x+1堆优质牧草.你可以选择任意区间但不能有重复的部分. 对于奶牛来说,自然是吃的越多越好,然而奶牛智商有限,现在请你帮助他. 输入输出格式 输入格式: 第一行,N,如题 接下来N行,每行一个数x,y,如题 输出格式: 一个数,最多的区间数 输入输出样例 输入样例#1: 3 1 3 7 8 3 4 输出样例#1: 5 说明 1<=n<=15

AC日记——[USACO5.4]奶牛的电信Telecowmunication 洛谷 P1345

[USACO5.4]奶牛的电信Telecowmunication 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define maxn 205 #define maxm 20005 #define INF 0x3f3f3f3f int head[maxn],cnt=1,n,m,E[m