外卖店优先级c++

题目

输入样例:

2 6 6
1 1
5 2
3 1
6 2
2 1
6 2

输出样例:

1

样例解释

6时刻时,1 号店优先级降到 3,被移除出优先缓存;2 号店优先级升到 6,加入优先缓存。

所以是有 1 家店 (2 号) 在优先缓存中。

思路

首先说一下暴力做法。我们可以用pair<int, int>来存订单信息,然后按时刻对其进行排序。从前往后遍历一遍订单信息,对于每个时刻,有订单的外卖店优先级加2,无订单的外卖店优先级减1。最后判断哪些外卖店优先级大于5。伪代码如下:

pair<int, int> record[N];//记录外卖信息
int a[N];//a[i]表示第i家外卖店的优先级sort(record, record + M);for (i: 0 -> M)
{for (i:0 -> M){//判断哪些加优先级,哪些减优先级}
}for (i: 0 -> N)//判断哪些优先级大于5

可以看到时间复杂度为O(10^10),可以尝试优化“改变优先级”这部分操作。

我们可以在遍历record数组的过程中使用一个last数组记录一家外卖店上一次接到订单的时间,等到该外卖店的订单再次出现时再处理没有订单期间带来的优先级减少;而不是每一时刻都把没有订单的店铺的优先级减1。如果在同一时刻一家店铺有多个订单,那么就批量处理。

以前的思路是针对一个订单信息的时刻,一个时刻处理所有店铺的优先级,而现在的思路是针对一个订单信息的店铺,一家店铺处理一家店铺的优先级。

代码
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 1e5 + 10;PII record[N];
int last[N], score[N];//last[i]表示编号为i的店铺最后一次订单在什么时刻;score[i]表示店铺当前的优先级
bool st[N];//st[i]表示编号为i的店铺是否在缓存中int main()
{int n, m, t;scanf("%d%d%d", &n, &m, &t);for (int i = 0; i < m; i ++){int ts, id;scanf("%d%d", &ts, &id);record[i] = {ts, id};}sort(record, record + m);for (int i = 0; i < m;){int ts = record[i].x, id = record[i].y;/*处理ts时刻之前外卖店铺编号为id减少的优先级不可能出现last[id] = ts - 1的情况;因为while循环对于连续时间内同Id的订单已经做了处理*/score[id] -= (ts - last[id] - 1);if (score[id] <= 3) st[id] = false;if (score[id] < 0) score[id] = 0;/*处理外卖店铺编号为id在ts时刻及以后的连续时刻增加的优先级*/while (id == record[i].y && i <= m){score[id] += 2;last[id] = record[i].x;if (score[id] > 5) st[id] = true;i ++;}}//处理每家店铺的最后一个订单时刻到T时刻减少的优先级for (int i = 1; i <= n; i ++){if (last[i] < t){score[i] -= (t - last[i]);if (score[i] <= 3) st[i] = false;}}int res = 0;for (int i = 1; i <= n; i ++)if (st[i])res ++;printf("%d", res);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker 安装部署 jenkins

今天 小☀ 给大家普及一下什么是 jenkins&#xff01;&#xff01; Jenkins是一个开源软件项目&#xff0c;基于Java开发的持续集成工具。它提供了一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。Jenkins起源于Hudson&#xff0c;主要用于持续、自动地构建、…

C语言 自定义类型:结构体

目录 前言 一、结构体类型 1.1 结构体的声明 1.2 结构体变量的创建和初始化 1.3 结构体的特殊声明 1.4 结构体的自引用 二、结构体的对齐 2.1 对齐规则 2.2 内存对齐的原因 2.3 修改默认对齐数 2.4 结构体传参 三、结构体实现位段 3.1 位段的内存分配 3.2 段的跨平…

通过JWT完成token登录验证

前言 什么是JWT&#xff1f; 全称是JSON Web token&#xff0c;是用于对应用程序上的用户进行身份验证的标记&#xff0c;使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据 使用JWT的优势 提高了程序的可伸缩性&#xff0c;也极大的提高了应用程序的安全…

几种常见的IO模型学习

IO模型 IO模型&#xff08;输入输出模型&#xff09;是计算机科学中用于描述程序如何处理输入、产生输出以及与外部系统交互的一种概念模型。在操作系统和网络编程中&#xff0c;IO模型尤其重要&#xff0c;因为它们决定了程序如何与文件、网络套接字和其他资源进行通信。以下…

Harbor介绍

1.什么是Harbor Harbor是一个开源的企业级Docker Registry管理项目&#xff0c;由VMware公司开源。 Harbor提供了比Docker官方公共镜像仓库更为丰富和安全的功能&#xff0c;尤其适合企业环境使用。以下是Harbor的一些关键特性&#xff1a; 权限管理&#xff08;RBAC&#x…

Ribbon知识点

1、通过类实现重写Ribbon规则 1.1注意 这个类一定不能跟启动类放在同一个包下面&#xff0c;不能被componentScan给扫描到。 需要如图放置&#xff1a; 要是被componentScan给扫描到&#xff0c;则会被所有的服务提供方所共享&#xff0c;那么就不能实现指定服务用不同的Ribbo…

灵神DP题单---划分型 DP---§6.1 判定能否划分

这里的状态定义一般使用DP【i】 表示 考虑前i个东西能否满足条件&#xff0c;然后我们枚举上一次的转移位置就好了 2369. 检查数组是否存在有效划分 需要注意的是我习惯从1开始写&#xff0c;所以要处理好边界的下标问题 class Solution { public:bool validPartition(vector&l…

java网络原理(三)----三次握手四次挥手

三次握手 三次握手是建立连接的过程&#xff0c;四次挥手是断开连接的过程&#xff0c;三次握手发生在socket.accept()之前。 客户端和服务器尝试建立连接的时候服务器就会和客户端进行一系列的数据交换称为握手&#xff0c;这个过程建立完了后&#xff0c;连接就好了。 A和B…

Matlab有限差分法求解狄利克雷(Dirichlet)边界的泊松(Poisson)问题,边界值为任意值

参考l链接&#xff1a; 有限差分法简介有限差分法-二维泊松方程及其Matlab程序实现弹性力学方程 有限差分法matlab,泊松方程的有限差分法的MATLAB实现 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Matrix method for Poisson Equation …

基于python+vue的OA公文发文管理系统flask-django-php-nodejs

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对OA公文发文管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的…

使用 Amazon SageMaker 微调 Llama 2 模型

本篇文章主要介绍如何使用 Amazon SageMaker 进行 Llama 2 模型微调的示例。 这个示例主要包括: Llama 2 总体介绍Llama 2 微调介绍Llama 2 环境设置Llama 2 微调训练 前言 随着生成式 AI 的热度逐渐升高&#xff0c;国内外各种基座大语言竞相出炉&#xff0c;在其基础上衍生出…

测试开发工程师(QA)职业到底需要干些什么?part1:移动端QA

概述 移动端QA测试开发工作主要涉及对移动应用程序进行质量保证和测试的开发工作。以下是移动端QA测试开发人员的主要职责和工作内容&#xff1a; 测试计划和策略制定&#xff1a;参与制定移动应用程序的测试计划和策略&#xff0c;确定测试范围、测试目标和测试方法。考虑到…

Mysql---DML

文章目录 目录 一.DML概述 注入数据&#xff08; Insert&#xff09; 替换数据&#xff08;replace&#xff09; 删除数据 &#xff08;delete&#xff09; 修改数据 &#xff08;update&#xff09; 查询数据 &#xff08;select&#xff09; 二. 多表连接查询 内连接 子…

Linux环境JMeter脚本性能测试、easyNmon生成监控报告

一、下载JMeter安装包 Jmeter是Java开发的&#xff0c;需要依赖JDK环境&#xff0c;因此我们需提前安装好JDK。 Jmeter是开源的工具&#xff0c;我们直接到官网下载即可。 最新版本下载地址&#xff1a;Apache JMeter - Download Apache JMeter 二、安装JMeter #新建jmete…

【GIT】最好用的git可视化教程网站推荐

最好用可视化学习git 网站:https://learngitbranching.js.org/?demo&localezh_CN 玩遍所有关卡&#xff0c;花半天时间便能掌握git &#x1f603; 本地仓库 基础命令介绍 git commit 提交 git branch <分支名> 创建分支 git checkout <分支名> 切换分支 git…

鸿蒙Harmony应用开发—ArkTS(@State装饰器:组件内状态)

State装饰的变量&#xff0c;或称为状态变量&#xff0c;一旦变量拥有了状态属性&#xff0c;就和自定义组件的渲染绑定起来。当状态改变时&#xff0c;UI会发生对应的渲染改变。 在状态变量相关装饰器中&#xff0c;State是最基础的&#xff0c;使变量拥有状态属性的装饰器&a…

【C++ leetcode】双指针问题

1. 611. 有效三角形的个数 题目 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 画图 和 文字 分析 判断是否是三角形要得到三边&#xff0c;由于遍历三边要套三层循环&#x…

开发调试、远程访问、内网穿透解决方案集合

开发调试、远程访问、内网穿透解决方案集合 前言Cpolar下载安装配置与使用 Ngrok购买隧道下客户端配置与使用 ZeroTier注册与安装创建虚拟网络加入虚拟网络配置授权 花生壳Centos系统Ubuntu系统使用花生壳控制台SN码登录添加映射 Loophole通过CLI方式安装登录与注销简单使用身份…

网络安全是什么? 为什么要学网络安全 ?网络安全怎么学习?

网络安全是什么&#xff1f; 网络安全是指保护计算机网络、网络设备、应用程序、数据和用户免受非法访问、攻击、破坏或泄漏的过程和技术。网络安全包括多个领域&#xff0c;例如网络防御、漏洞管理、加密技术、身份验证和访问控制等等。 网络安全非常重要&#xff0c;因为现…

省一餐,是减瘦捷径?还是牺牲健康的换取?

肥胖从来不是靠短时间的&#xff0c;每天少吃一餐就能减掉的&#xff0c;需要长期坚持。但三餐不管哪一餐&#xff0c;长期不吃&#xff0c;都不会有好结果。为了瘦&#xff0c;失去健康值不值呢&#xff1f; 长期不吃早饭后果 1、消耗率、吸收率减慢&#xff1a;身体经过一整…