h的蓝桥杯每日一题

2.烤肠试吃【算法赛】 - 蓝桥云课

这个题主要是考察的二分+贪心结合去找最小值最大化的问题

在这个题当中我们可以看到需使用优先队列(最小堆)来管理烤架可用时间(快速找到最早可用烤架)

cpp 复制代码
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
const int N=100010;
ll n,k,d;
ll a[N];
bool can(ll t)
{
	priority_queue<ll,vector<ll>,greater<ll>> pq;
	for(int i=0;i<k;i++)pq.push(0);
	for(int i=0;i<n;i++)
	{
		ll avail=pq.top();//空闲烤架的时间 
		pq.pop();
		ll start=max(avail,a[i]);//得到目前能用烤架的最小时间 
		ll finish=start+d;//得到考场的时间 
		if(finish>t)return false;
		pq.push(finish);
	}
	return true;
}

int main()
{
	cin>>n>>k>>d;
	for(int i=0;i<n;i++)cin>>a[i];
	sort(a,a+n);
	ll l=a[0]+d;
	ll r=a[n-1]+n*d;
	while(l<r)
	{
		ll mid=l+(r-l)/2;
		if(can(mid))
		{
			r=mid;
		}
		else l=mid+1;
	}
	cout<<l<<endl;
	return 0;
}
相关推荐
8Qi89 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
嵌入式ZYXC12 小时前
第3篇:《面试题:I2C为什么要加上拉电阻?阻值怎么选?》
stm32·单片机·嵌入式硬件·面试·职场和发展
sbjdhjd12 小时前
面试(5)| 3.5 小时面试复盘第五弹:加班出差 + 客户响应 + 压力面全拆解
经验分享·程序人生·面试·职场和发展·开源·跳槽·求职招聘
小欣加油15 小时前
leetcode2161 根据给定数字划分数组
数据结构·c++·算法·leetcode·职场和发展
sbjdhjd17 小时前
面试题完结 | 投票题 + 到岗时间 + 压力缓解
经验分享·笔记·面试·职场和发展·开源·求职招聘·印象笔记
8Qi817 小时前
LeetCode 115 & 392:不同子序列 / 判断子序列
算法·leetcode·职场和发展·动态规划
我爱cope18 小时前
【Agent智能体23 | 规划-规划工作流】
人工智能·设计模式·语言模型·职场和发展
8Qi818 小时前
LeetCode 72:编辑距离(Edit Distance)—— 题解
算法·leetcode·职场和发展·动态规划
8Qi818 小时前
LeetCode 583. 两个字符串的删除操作
算法·leetcode·职场和发展·动态规划
小欣加油20 小时前
Leetcode31 下一个排列
数据结构·c++·算法·leetcode·职场和发展