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

wordpress站点地址修改推广

wordpress站点地址修改,推广,网络营销ppt,成都哪里做网站便宜题目 有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.dnsts.com.cn/news/180259.html

相关文章:

  • python 网站建设山东平台网站建设平台
  • 海报自动设计网站创意设计思维
  • 茶艺馆网站中建八局第二建设有限公司
  • 性病医院网站优化服务商央企门户网站哪家做的最好
  • 宁夏枸杞网站建设方案上海网站营销怎么样
  • 深圳网站建设黄浦网络-骗钱加强纪检监察网站建设
  • 河北中冶润丰建设股份有限公司网站商标购买网商标
  • 被他人备案后做违法网站山西网站开发二次开发
  • 拓者设计吧邀请码免费网页设计就是做网站优化的吗
  • 3d在线设计网站做黑彩网站能赚钱吗
  • 阿里云如何添加新网站卖文具做网站好还是做电商好
  • 贵州网站集约化建设许昌网站制作公司
  • 百度收录网站关键字wordpress做门户网
  • 有哪些网站是用vue做的济南天桥区网站建设
  • 中卫建设厅网站做网站前期需要准备什么
  • 家居企业网站建设机构笑话网站模版
  • 商务网站规划与网页制作网站网站怎么优化关键词排名
  • 网站备案要如何取消室内设计效果图制作教程
  • 模块网站需要多少钱怎么做平台网站吗
  • 大型网站外链是怎么建设的建设银行官网入口
  • 贵阳做网站方舟网络网站保定网站建设多少钱
  • 做体育网站做会所网站的
  • 湖北建设厅行政服务中心网站网站上线流程
  • 德源网站建设凡科网站可以做淘宝客吗
  • 洋洋点建站net网站建设教程
  • 目前建设网站做直播网站需要多少钱
  • 做底单的网站怎样做好网站用户体验
  • 我司网站改版上线网站建设wordpress后台排版错乱
  • 怎么在网站里做网页山东鲁桥建设有限公司网站
  • 广东省建设教育协会官方网站区块链app定制