外卖店优先级c++

news2024/9/20 16:09:19
题目

输入样例:

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.coloradmin.cn/o/1537230.html

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

相关文章

整数和浮点数在内存中存储

整数在内存中的存储 整数的2进制表⽰⽅法有三种&#xff0c;即原码、反码和补码。 对于整形来说&#xff0c;数据存放内存中的其实是补码。 在计算机系统中&#xff0c;数值一律用补码来表示和存储。原因是&#xff0c;使用补码&#xff0c;可以使符号位和数值域统一处理&am…

手撕LRU 最近最少使用缓存淘汰策略 + LinkedHashMap

LRU 最近最少使用缓存淘汰策略 1 LRU 算法就是一种缓存淘汰策略2 手撕LRU3 LinkedHashMap 常见面试题 1 LRU 算法就是一种缓存淘汰策略 计算机的缓存容量有限&#xff0c;如果缓存满了就要删除一些内容&#xff0c;给新内容腾位置。但问题是&#xff0c;删除哪些内容呢&#x…

【算法】双指针的应用

文章目录 前言1. 移动零&#xff08;easy&#xff09;2. 复写零&#xff08;easy&#xff09;3. 快乐数&#xff08;medium&#xff09;4. 盛水最多的容器&#xff08;medium&#xff09;5. 有效三角形的个数&#xff08;medium&#xff09;6.和为 s 的两个数字&#xff08;eas…

diffusion model(十四): prompt-to-prompt 深度剖析

infopaperPrompt-to-Prompt Image Editing with Cross Attention Controlgithubhttps://github.com/google/prompt-to-promptOrg:Google Research个人复现https://github.com/myhz0606/diffusion_learning个人博客主页http://myhz0606.com/article/p2p 1 前言 基于扩散模型&a…

【OpenSSH】Windows系统使用OpenSSH搭建SFTP服务器

【OpenSSH】Windows系统使用OpenSSH搭建SFTP服务器 文章目录 【OpenSSH】Windows系统使用OpenSSH搭建SFTP服务器一、环境说明二、安装配置步骤1.下载完成后&#xff0c;传至服务器或者本机并解压至C:/Program Files/目录下2.打开PowerShell终端3.进入到包含ssh可执行exe文件的文…

线性顺序表算法库

list.cpp 具体函数实现 #include <stdio.h> #include "list.h" #include <malloc.h>/************************************************** ①函数名: CreateList 功 能: 用数组构建顺序表 参 数: ①SqList *&L:传入的线性表 ②ElemType a[]:使用…

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

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

【Java反序列化】CommonsCollections-CC1链分析

前言 好几天没发博文了&#xff0c;偷偷憋了个大的——CC1链分析&#xff0c;手撸了一遍代码。虽然说&#xff0c;这个链很老了&#xff0c;但还是花费了我一段时间去消化吸收&#xff0c;那么接下来&#xff0c;我会简洁的介绍下整个链的利用过程&#xff0c;还有哪些不理解的…

命令提示符——CMD基础操作介绍

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

【MySQL】基本查询(1)

【MySQL】基本查询&#xff08;1&#xff09; 目录 【MySQL】基本查询&#xff08;1&#xff09;表的增删改查Create单行数据 全列插入多行数据 指定列插入插入否则更新替换 RetrieveSELECT 列全列查询指定列查询查询字段为表达式为查询结果指定别名结果去重 WHERE 条件英语不…

学点儿Java_Day9_多图带你搞懂Java访问修饰符

1 前言 在学习Java访问修饰符的作用及相应的效果时&#xff0c;看到了像下面这样的图 表达的内容基本都是一致的&#xff0c;但是带着一些疑惑经过一番“深入”学习后&#xff0c;我觉得这样划分不够细致&#xff0c;把我的总结分享一下。 2 多图带你搞懂Java访问修饰符 …

[环境配置].ssh文件夹权限修改方法

问题描述&#xff1a; 通过VSCode中的Remote Explorer或者通过CMD等命令行窗口连接远程机器时&#xff0c;会因为提示 "Bad owner or permissions on C:\\Users\\xxx/.ssh/config"而导致失败&#xff0c;最终呈现在VSCode中的效果是&#xff0c;弹窗提示"Could…

数据挖掘与机器学习 1. 绪论

于高山之巅&#xff0c;方见大河奔涌&#xff1b;于群峰之上&#xff0c;便觉长风浩荡 —— 24.3.22 一、数据挖掘和机器学习的定义 1.数据挖掘的狭义定义 背景&#xff1a;大数据时代——知识贫乏 数据挖掘的狭义定义&#xff1a; 数据挖掘就是从大量的、不完全的、有噪声的、…

OceanPen Art AI绘画系统 运营教程(二)AI视频AI创作PPT

在一个崇高的目标支持下&#xff0c;不停地工作&#xff0c;即使慢&#xff0c;也一定会获得成功。 —— 爱因斯坦 演示站点&#xff1a; ai.oceanpen.art 官方论坛&#xff1a; www.jingyuai.com 登陆后台 ppt密匙设置 导航菜单配置 Key池管理 二、前端显示 体验站点…

Mysql---DML

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.DML概述 DML&#xff08;Data Manipulation Language&#xff09;是MySQL中用于操作数据库中数据的语言。DML语句用于插入、更新和删除数据库中的记录&#xff0c;以及查询和修改数据库中的数…

Redisson分布式锁(WatchDog分析,浅浅看下源码)

带大家简单了解下Redisson的看门狗机制&#xff0c;这个面试中也比较常见。 目录 WatchDog&#xff08;看门狗&#xff09;机制开启WatchDog&#xff08;看门狗&#xff09;浅看下源码 WatchDog&#xff08;看门狗&#xff09;机制 Redisson看门狗机制是用于解决在业务运行时间…

WSL2的安装步骤

WSL2&#xff08;Windows Subsystem for Linux 2&#xff09;是微软公司开发的一项创新性技术&#xff0c;它在Windows操作系统上提供了一个完整的Linux内核&#xff0c;并允许用户在Windows环境中运行Linux发行版。之前想在Windows上使用Linux系统必须先安装VirtualBox或VMWar…

PTA 抢红包 25分 (JAVA)

题目描述 没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录&#xff0c;请你统计一下他们抢红包的收获。 输入格式&#xff1a; 输出格式&#xff1a; 按照收入金额从高到低的递减顺序输出每个人的编号和收入金额&#xff08;以元为单位&#xff0c;输出小…

JsonUtility.ToJson 和UnityWebRequest 踩过的坑记录

项目场景&#xff1a; 需求&#xff1a;我在做网络接口链接&#xff0c;使用的unity自带的 UnityWebRequest &#xff0c;数据传输使用的json&#xff0c;json和自定义数据转化使用的也是unity自带的JsonUtility。使用过程中发现两个bug。 1.安全验证失败。 报错为&#xff1a…

day-24 跳跃游戏 III

思路&#xff1a;dfs方法&#xff0c;从开始节点开始进行深度优先遍历&#xff0c;利用一个数组vis[]记录该位置是否被访问过&#xff0c;如果遍历到一个已经访问的位置&#xff0c;返回false 如果遍历到某位置的值为0&#xff0c;返回true code: class Solution {public boo…