首页 > 其他分享 >机场大巴(二分查找与二分答案)

机场大巴(二分查找与二分答案)

时间:2024-05-25 16:00:12浏览次数:17  
标签:二分 10 大巴 int 到达 查找 乘坐 客人

题目描述

一场神秘大会要在小明的家里举办了!

他的处于世界各地的客人将会到达当地的机场,前来参会。具体地说,有 N个客人到达了机场(1≤N≤100000),其中客人 i在时间 ti(0≤ti≤10^9)到达。小明安排了 M(1≤M≤10^5 )辆大巴来机场接这些客人。每辆大巴可以乘坐 C个客人(1≤C≤N)。小明正在机场等待客人们到来,并且准备安排到达的客人们乘坐大巴。当最后一个乘坐某辆大巴的客人到达的时候,这辆大巴就可以发车了。小明想要做一个优秀的主办者,所以并不想让客人们在机场等待过长的时间。如果小明合理地协调这些大巴,等待时间最长的客人等待的时间的最小值是多少?一个客人的等待时间等于他的到达时间与他乘坐的大巴的发车时间之差。

输入数据保证M×C≥N。

输入格式

输入的第一行包含三个空格分隔的整数 N,M,和 C。第二行包含N个空格分隔的整数,表示每个客人到达的时间。

输出格式

输出一行,包含所有到达的客人中的最大等待时间的最小值。

输入样例

6 3 2
1 1 10 14 4 3

输出样例

4

说明/提示

如果两个时间 1到达的客人乘坐一辆巴士,时间 3和时间 4到达的客人乘坐乘坐第二辆,时间 10和时间 14到达的客人乘坐第三辆,那么等待时间最长的客人等待了 4个单位时间(时间 10到达的客人从时间 10等到了时间 14)。

#include<bits/stdc++.h>
using namespace std;

int a[1000100], N, M, C, l, r, mid, res;

int f(int x) {
	int s = 1; 
	int now = 1; 
	int ss = 1; 
	for (int i=2;i<=N;i++) {
		if (a[i] - a[now] <= x && ss < C) {
			ss ++; 
		} 
		else {
			s ++;
			now = i;
			ss = 1; 
		} 
	} 
	if (s <= M) return 1;
	else return 0; 
} 

int main() {
	scanf("%d%d%d", &N, &M, &C);
	for (int i = 1; i <= N; i++) scanf("%d", &a[i]);
	sort(1 + a, 1 + a + N);
	l = 1;
	r = a[N] - a[1];
	while (1) {
		if (l == r) {
			printf("%d\n", l);
			break;
		}
		mid = (l + r) / 2;
		res = f(mid);
		if (res == 1)  r = mid;
		else l = mid + 1;
	}

}

标签:二分,10,大巴,int,到达,查找,乘坐,客人
From: https://blog.csdn.net/2301_79534589/article/details/139198939

相关文章

  • JS核心语法【流程控制语句、函数】;DOM【查找元素、操作元素、事件】--学习JavaEE的day
    day48JS核心技术JS核心语法继day47注意:用到控制台输出、弹窗流程控制语句Ifelse、For、For-in(遍历数组时,跟Java是否一样【java没有】)、While、Dowhile、break、continue案例:1.求1-100之间的偶数之和<!DOCTYPEhtml><html> <head> <metacharset="UTF......
  • 1-数组-11-二分查找-LeetCode704
    1-数组-11-二分查找-LeetCode704参考:代码随想录LeetCode:题目序号35更多内容欢迎关注我(持续更新中,欢迎Star✨)Github:CodeZeng1998/Java-Developer-Work-Note技术公众号:CodeZeng1998(纯纯技术文)生活公众号:好锅(Lifeismorethancode)博客园:CodeZeng1998其他平台:CodeZeng19......
  • 图论-二分图匹配匈牙利算法
    不得不说,如果以现实角度代入此算法的理解,就合理了很多,虽然有悖道德准则重点在于以下几点每次给女生分配男生前,都把男生全部初始化为可预定状态(即使他已经被别人成功匹配了)在所有女生中意的男生中遍历,如果发现该男生可预订就先预定,然后看他是否已经有主了,如果有主了,就dfs(matc......
  • 代码随想录算法训练营第一天 | 704.二分查找;27. 移除元素
    代码随想录算法训练营第一天|704.二分查找(红蓝模板法);27.移除元素(双指针法)704题链接:https://leetcode.cn/problems/binary-search/description/二分查找:https://programmercarl.com/0704.二分查找.html#其他语言版本二分查找红蓝法笔记:二分查找为什么总是写错?_哔哩哔哩_bil......
  • 二分查找
    二分查找的写法(有两种,这里只记录第一种): 如果区间是[a,b],即可以取到low、high,则mid=(low+high)/2:1.while(low<=high){..},注意此处是"<="2.if(v[mid]<target){low++;}3.if(v[mid]>target){high--;}这里条件控制一定要明确:<=、low++、high--。补充:while(low<=h......
  • 【CodeChef】Limit of MEX(二分、ST表、组合数学)
    题目大意:计算\(\sum_{L=1}^{N}\sum_{R=L}^{N}f(A_L,...,A_R)\),其中\(f(A_1,A_2,...,A_N)=\max(A_1,A_2,...,A_N)-count(A_1,A_2,...,A_N)+1\),\(count\)函数的值为参数中不同元素的个数。考虑计算\(\sum_{L=1}^{N}\sum_{R=L}^{N}max(A_1,A_2,...,A_N)\)。对于任意\(1\lei\len......
  • 二分图的判定(Bipartite graph pending)
    二分图的判定(Bipartitegraphpending)////CreatedbyLANSGANBSon24-5-23.///**codetemplate:https://github.com/LANSGANBS/code-template*local:C:\Users\18019\CLionProjects\.cpp-code*URL:NULL*Last_Status:NULL*写完这道就去原*/#include<b......
  • 二分图
    二分图的概念:如果将一个无向图的结点染成黑色或白色,并且可以满足任意相同颜色的两点之间没有边,这个无向图就是二分图。一个图是否为二分图,一般用染色法判断。用\(0,1\)表示顶点的颜色。将任意一个顶点任意染色,然后遍历图,如果遇到没染色的点,就染成与这个点相反的颜色;否则判断......
  • 按文件扩展名查找目录下的文件
    From: https://mp.weixin.qq.com/s/RxyRU5kYvYJ3Wb4I86Vx6A---------------------------------------------------------------------------------------importglobclassTest_Find_File:deftest_find_file(pattern,path='.'):"""......
  • 完全二分图生成树个数
    首先矩阵树定理,得到一个行列式,大概形如:\[\begin{bmatrix}m&&&&-1&-1&-1\\&m&&&-1&-1&-1\\&&m&&-1&-1&-1\\&&&m......