当前位置: 首页 > news >正文

wordpress网站数据库崩溃无锡招标网官方网站

wordpress网站数据库崩溃,无锡招标网官方网站,新葡京网址网站建设,网站源码怎样弄成网站题目 有N个餐厅和M个外卖员#xff0c;每个餐厅在某个时间点会产生一个外卖订单#xff0c;这些订单都有产生时间、所需送达时间和优先级。外卖员在空闲时会选择最优先的订单来配送#xff0c;直到所有订单都被送达。具体规则如下: 对于每个餐厅的订单#xff0c;优先级高…题目 有N个餐厅和M个外卖员每个餐厅在某个时间点会产生一个外卖订单这些订单都有产生时间、所需送达时间和优先级。外卖员在空闲时会选择最优先的订单来配送直到所有订单都被送达。具体规则如下: 对于每个餐厅的订单优先级高的订单优先其次是所需送达时间最短的订单再次是产生时间最早的订单。外卖员在空闲时会从所有餐厅的最高优先级订单中挑选一个所需送达时间最短的订单进行配送若所需送达时间相同则选择餐厅编号最小的订单。 输入描述 第一行三个数N、M、P分别表示有N个餐厅M个外卖员P个订单随后有P行每行有4个数字分别是餐厅编号、产生时间、优先级和所需送达时间。 输出描述 输出P行每行表示每个订单被送达的时间点。 示例 输入 2 2 4 1 1 2 5 1 4 3 2 2 2 1 4 2 5 2 1 输出 6  8  6  7 实现思路 订单的排序与优先队列 首先将所有订单按照产生时间进行排序。这样可以按照时间顺序逐步处理订单。使用一个优先队列 pq最大堆来存储当前时间点可以处理的订单并根据优先级、送达时间、餐厅编号的规则排序。 外卖员的空闲时间管理 使用一个最小堆 delivery_boys 来记录每个外卖员的空闲时间。最小堆确保我们总是优先分配订单给最早空闲的外卖员。 模拟订单分配 当前时间点为最早空闲的外卖员的空闲时间或者下一个订单的产生时间。将当前时间点之前产生的所有订单加入优先队列 pq 中。从 pq 中选择最优的订单分配给最早空闲的外卖员并更新外卖员的空闲时间。如果 pq 中没有订单时间推进到下一个订单产生的时间。 更新订单送达时间 外卖员选择订单后送达时间为外卖员当前空闲时间或订单产生时间取两者较大值加上订单的送达时间。记录每个订单的送达时间并将外卖员的空闲时间更新为新的送达时间。 C 代码 #include iostream #include vector #include queue #include algorithmusing namespace std;struct Order {int restaurant;int start_time;int priority;int delivery_time;int index; // 记录订单的原始顺序 };// 定义优先级队列的排序规则 struct Compare {bool operator()(Order const a, Order const b) {if (a.priority ! b.priority) return a.priority b.priority;if (a.delivery_time ! b.delivery_time) return a.delivery_time b.delivery_time;return a.restaurant b.restaurant;} };int main() {int N 2, M 2, P 4;vectorOrder orders(P);orders[0] {1,1,2,5,0};orders[1] {1,4,3,2,1};orders[2] {2,2,1,4,2};orders[3] {2,5,2,1,3};// 按产生时间排序sort(orders.begin(), orders.end(), [](Order const a, Order const b) {return a.start_time b.start_time;});vectorint result(P, 0);priority_queueOrder, vectorOrder, Compare pq;// 外卖员的空闲时间最小堆priority_queueint, vectorint, greaterint delivery_boys;// 初始化所有外卖员为空闲状态for (int i 0; i M; i) {delivery_boys.push(0);}int i 0;while (i P || !pq.empty()) {// 当前时间为最早的外卖员空闲时间或下一个订单的产生时间int current_time delivery_boys.top();if (i P) {current_time max(current_time, orders[i].start_time);}// 将当前时间之前产生的订单加入优先队列while (i P orders[i].start_time current_time) {pq.push(orders[i]);i;}if (!pq.empty()) {// 取出最早空闲的外卖员int delivery_boy_time delivery_boys.top();delivery_boys.pop();// 选择优先级最高的订单Order top_order pq.top();pq.pop();// 更新订单送达时间int delivery_time max(delivery_boy_time, top_order.start_time) top_order.delivery_time;result[top_order.index] delivery_time;// 更新外卖员的空闲时间delivery_boys.push(delivery_time);} else {// 如果当前没有订单可分配推进时间到下一个订单的产生时间if (i P) {delivery_boys.push(orders[i].start_time);}}}for (int i 0; i P; i) {cout result[i] endl;}return 0; } 时间复杂度 初始排序 将订单按产生时间排序的时间复杂度为 O(Plog⁡P)O(P \log P)O(PlogP)其中 PPP 是订单数量。 模拟分配过程 每个订单最多进入和弹出优先队列一次进入优先队列的时间复杂度为 O(log⁡P)O(\log P)O(logP)。外卖员的空闲时间最小堆操作插入和弹出的时间复杂度为 O(log⁡M)O(\log M)O(logM)其中 MMM 是外卖员的数量。总的模拟分配过程的时间复杂度为 O(Plog⁡PPlog⁡M)O(P \log P P \log M)O(PlogPPlogM)。 综合考虑时间复杂度为 O(Plog⁡PPlog⁡M)O(P \log P P \log M)O(PlogPPlogM)。 空间复杂度 优先队列 pq 和 delivery_boys 优先队列 pq 最多存储 PPP 个订单因此空间复杂度为 O(P)O(P)O(P)。最小堆 delivery_boys 始终存储 MMM 个外卖员的空闲时间因此空间复杂度为 O(M)O(M)O(M)。 其他存储 orders 数组存储 PPP 个订单的信息因此空间复杂度为 O(P)O(P)O(P)。result 数组存储每个订单的送达时间因此空间复杂度为 O(P)O(P)O(P)。 综合考虑空间复杂度为 O(PM)O(P M)O(PM)。
http://www.w-s-a.com/news/51734/

相关文章:

  • 养老做增减的网站医院网站怎么做优化排名
  • 企业网站的推广方法有哪些上海猎头公司前十名
  • 电商网站建设建议免费下载app
  • 网站搭建设计是什么意思百度地图放到网站上
  • 东莞网站建设市场分析淘宝网站框架
  • 新网站多久被百度收录网站空间单位
  • 2017常用的网站昆明网站代理
  • 成都海鸥手表网站安阳网站建设策划
  • 做好的网站怎么发布做网站应该做哪方面的
  • 可以找厂家的网站品牌创意型网站开发
  • 有没有做牛羊角的网站电商网站报价
  • 网站建设行业咨讯文章网站兼容模式怎么设置
  • 商务网站建设概念东莞做网站的公司吗
  • 高稳定性的网站设计制作wordpress 检测插件
  • 无锡网站制作排名自适应网站建设推荐
  • 度娘网站桃花怎么做网站制作 p
  • 小欢喜林磊儿什么网站做家教搜索优化公司
  • 龙岗做网站哪里找网站建设简介是什么意思
  • 做网站的标准北京西站出站口
  • asp.net新建网站市场营销管理是做什么的
  • 南昌网站建设模板服务商建设什么网站挣钱
  • 网站建设实训记录企业网站建设运营
  • 视频网站文案住房和城乡建设部门
  • 汕头网站排名推广新余门户网站开发
  • 湖南智能网站建设哪家好wordpressμ
  • 公司网站备案必须是企业信息么睢宁县凌城做网站的
  • 上海网站建设公司 珍岛宁波免费自助建站模板
  • 南昌知名的网站建设公司南京网站开发选南京乐识赞
  • 外贸网站建设 深圳seo怎么提升关键词的排名
  • 网站推广效果的评价google关键词