acwing14期周赛---------安排时间(贪心+枚举)

贝茜独立经营着一家餐厅,她一天的营业时间可以分为 n 个时段,编号 1∼n。

在这一天的营业中,她一共接收到了 m 个客人的预约用餐订单,编号 1∼m。

其中,第 i 个订单的相关信息如下:

  • 贝茜在第 si个时段接到该订单。
  • 下单客人将在第 di个时段来到餐厅用餐。
  • 准备这一单菜品需要恰好花费 ci 个时段的时间。第 i 个订单只可能在第 [si,di−1]个时段内准备。

在单个时段内,贝茜只能专心做一件事:要么休息,要么准备某一个订单的菜品,要么迎接某一个到来的客人。

注意,如果某个时段没有客人到来,那么在这个时段贝茜就不可能有迎接客人的行动。

如果想要第 i 个客人满意,就必须同时满足两个条件:

  1. 客人到来时,贝茜需要及时迎接,即贝茜需要在第 di 个时段迎接第 i个客人。
  2. 客人的下单菜品,需要在客人到来前准备完善,即在第 [si,di−1] 个时段内,恰好花费 ci 个时段(不一定是连续的 ci 个时段,但必须是不多不少的 ci 个时段)来准备该客人的下单菜品。

请你判断,贝茜是否有可能让所有客人满意。

如果有可能,请你给出一种合理的工作安排方案。

输入格式

第一行包含两个整数 n,m。

接下来 m行,其中第 i 行包含三个整数 si,di,ci,用来描述第 i 个订单。

注意:

  • 输入保证,所有订单的 di各不相同,但是,不同订单的 si 可能相同。
  • 订单编号和 si,di 不具备相关性,即订单未必是按照某种时间顺序编号的。
输出格式

如果不可能让所有客人满意,则输出一行 -1 即可。

如果有可能让所有客人满意,则在一行内输出 n 个整数,用来表示一种合理的工作安排方案,其中第 i个整数用来表示第 i 个时段的具体安排:

  • 如果第 i个时段用来迎接客人(无论哪个客人),则第 i 个输出整数应当为 m+1。
  • 如果第 i 个时段用来准备第 x 个订单(1≤x≤m),则第 i个输出整数应当为 x。
  • 如果第 i 个时段用来休息,则第 i 个输出整数应当为 00。

也就是说,输出整数应当在 [0,m+1]范围内,其中 0 表示休息,1∼m 表示准备订单,m+1 表示迎接客人。

如果方案不唯一,输出任意合理方案均可。

数据范围

前 4 个测试点满足 2≤n≤10。
所有测试点满足 2≤n≤100,1≤m≤n,1≤si<di≤n,1≤ci≤n。

输入样例1:
5 2
1 3 1
1 5 1
输出样例1:
1 2 3 0 3
输入样例2:
3 2
1 3 1
1 2 1
输出样例2:
-1
输入样例3:
10 3
4 7 2
1 10 3
8 9 1
输出样例3:
2 2 2 1 1 0 4 3 4 4

解析:

贪心情况:要先做接待客人早的订单

假设有两个订单 (si, di, ci) 和 (sj, dj, cj), di < dj
若 si < sj, 如果不先准备订单 i, 那么 si 到 sj 这段时间就是浪费的。
若 si >= sj, 如果在 si 之后还是处理订单 j, 那么订单 i 可能会完不成,而订单 j 可以在 si 之前处理以及准备完订单 i 之后再处理。


 AC代码如下: 

#include<iostream>using namespace std;const int N = 110;struct Person
{int s;int d;int c;
}p[N];
int n,m;
int ans[N];
//枚举
bool work()
{//枚举每个时间段for(int i=1;i<=n;i++){//设置一个标记,用来判断是否完成订单和是否接单int t = -1;//枚举每个来单情况for(int j=1;j<=m;j++){//接待客人判断if(p[j].d == i){if(p[j].c) return false;t = m + 1;break;}//如果接单,要做接客人最早的那份订单if(p[j].s <= i && p[j].c > 0){if(t == -1 || p[t].d > p[j].d){t = j;}}}if(t == -1) ans[i] = 0;else if(t == m+1) ans[i] = t;else ans[i] = t,p[t].c--;}return true;
}int main()
{scanf("%d %d",&n,&m);for(int i=1;i<=m;i++){int s,d,c;scanf("%d %d %d",&s,&d,&c);p[i] = {s,d,c};}if(!work()) puts("-1");else{for(int i=1;i<=n;i++){printf("%d ",ans[i]);}}return 0;
}

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

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

相关文章

python巧用定理判断素数

目录 判断一个数n是否是素数 求一个数的素因数个数 求大于等于指定数的最小素数 在数论中有三个非常重要的关于素数的定理 1、任何数都可以表示成若干个素数的乘积 2、任意数的一个素因子如果小于根号n&#xff0c;那么另一个与其对应的素因子必然大于根号n。 3、除了2和…

求小数的某一位(c++题解)

题目描述 分数化为小数后&#xff0c;小数点后第位的数字是多少&#xff1f; 输入格式 三个正整数&#xff0c;相邻两个数之间用单个空格隔开。 输出格式 一个数字。 样例 输入样例 复制1 2 1输出样例 复制5 ______________________________________________________…

pytorch张量和numpy数组相互转换

pytorch张量和numpy数组相互转换 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;将numpy数组转换为Pytorch张量&#x1f333;1. 功能介绍2. 用法 &#x1f333;将Pytorch张量转换为numpy数组&#x1f333;1. 功能介绍2. 用法 &#x1f333;P…

使用python写一个二叉树

可以使用Python的类来实现二叉树&#xff0c;每个节点包括一个值和指向左右子节点的引用。 class Node:def __init__(self, value):self.value valueself.left Noneself.right Noneclass BinaryTree:def __init__(self, root):self.root Node(root)def insert(self, value…

浅谈应该遵守的伦敦银交易规则

做伦敦银投资的朋友应遵守伦敦银交易规则&#xff0c;伦敦银交易规则不是指那些伦敦银交易技巧&#xff0c;而是在这个市场中要遵循的一些约定&#xff0c;下面我们就来讨论一下。 风险管理。风险管理即指投资者控制自己一笔乃至整体交易的风险&#xff0c;没有风险管理意识的投…

JavaSE——方法(1/2)-介绍、方法的各种形式、使用的要求

目录 方法的介绍 方法的其他形式 方法使用的要求 方法的介绍 方法是什么 方法是一种语法结构&#xff0c;它可以把一段代码封装成一个功能&#xff0c;以便重复调用。 方法的完整格式 修饰符 返回值类型 方法名 ( 形参列表 ) { 方法体代码(需要执行的功能代码) return…

OpenCV-36 多边形逼近与凸包

目录 一、多边形的逼近 二、凸包 一、多边形的逼近 findContours后的轮廓信息countours可能过于复杂不平滑&#xff0c;可以用approxPolyDP函数对该多边形曲线做适当近似&#xff0c;这就是轮廓的多边形逼近。 apporxPolyDP就是以多边形去逼近轮廓&#xff0c;采用的是Doug…

面试经典150题——三数之和

​"The road to success and the road to failure are almost exactly the same." - Colin R. Davis 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力方法 因为三个数相加为0&#xff0c;那么说明其中两个加数的和与另一个加数为相反数则满足题意。所以可以得到…

ClickHouse时区

clickhouse数据库的时间是UTC时间。服务器默认的是上海时间。 sudo vim /etc/clickhouse-server/config.xml clickhouse默认的时区是注释的就是UTC时间 %F 表示日期&#xff0c;格式为 YYYY-MM-DD。%T 表示时间&#xff0c;格式为 HH:MM:SS。 因此&#xff0c;formatDateT…

主干网络篇 | YOLOv5/v7 更换主干网络为 VGG13 / VGG16 / VGG19 | 对比实验必备

论文地址:https://arxiv.org/pdf/1409.1556.pdf 在这项工作中,我们研究了卷积网络深度对其在大规模图像识别环境中准确性的影响。我们的主要贡献是对使用非常小(33)卷积滤波器的架构的不断增加深度的网络进行了彻底评估,这表明通过将深度推进到16-19个权重层,可以在先前…

第72讲后台管理Container布局实现

新建layout目录 登录成功后&#xff0c;跳转layout布局容器页面 login页面&#xff1a; 导入router import router from "/router";登录成功&#xff0c;跳转后台管理页面 选用布局容器&#xff1a; <template><div class"common-layout">…

javaweb物业管理系统jsp项目

文章目录 物业管理系统一、系统演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目源码&#xff08;9.9&#xffe5;带走&#xff09; 物业管理系统 可用作javaweb项目、servlet项目、jsp项目的项目设计 一、系统演示 物业管理系统 二、项目介绍 语言&a…

Vue3中Setup概述和使用(三)

一、引入Setup 1、Person.Vue 与Vue3编写简单的App组件(二) 中的区别是&#xff1a;取消data、methods等方法,而是将数据和方法定义全部放进setup中。 <template><div class"person"><h1>姓名:{{name}}</h1><h1>年龄:{{age}}</h…

SQL、Hive中的SQL和Spark中的SQL三者联系与区别

SQL、Hive中的SQL和Spark中的SQL&#xff08;即SparkSQL&#xff09;都是用于处理和分析数据的查询语言&#xff0c;但它们在实现、性能、应用场景等方面存在一些明显的区别和联系。 联系&#xff1a; 分布式计算&#xff1a;三者都是分布式计算的引擎&#xff0c;都可以在大数…

2023-12蓝桥杯STEMA 考试 Python 中高级试卷解析

蓝桥杯STEMA 考试 Python 中高级试卷(12 月) 一、选择题 第一题 以下哪项是取余运算符?( C ) A、* B、// C、% D、+ 第二题 已知:s = "python",执行 print(s[::2])语句后,输出的结果是( B )。 A 、 python B 、pto C 、 nohtyp D 、 yhn …

像素、分辨率、公差的概念

像素 &#xff08;Pixel&#xff09; 像素是指在由一个数字序列表示的图像中的一个最小单位。像素的多少表明相机所含有的感光元件的多少。所谓 200 万像素 CCD 就是一个由 200 万个光电二极管构成的集合体。一台100万像素的相机拍摄的照片洗成5寸比洗成六寸清晰点。80万 1024…

Acwing---839. 模拟堆

模拟堆 1.题目2.基本思想3.代码实现 1.题目 维护一个集合&#xff0c;初始时集合为空&#xff0c;支持如下几种操作&#xff1a; I x&#xff0c;插入一个数 x&#xff1b;PM&#xff0c;输出当前集合中的最小值&#xff1b;DM&#xff0c;删除当前集合中的最小值&#xff08…

好看的登录界面源码,希望您喜欢

闲来无事&#xff0c;写几个好看的html界面玩一玩&#xff01; 登录界面一&#xff1a; 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

MySQL表的基础操作

创建表 create table 表名&#xff08;列名 类型&#xff0c;列名 类型……&#xff09; 注意 1.在进行表操作之前都必须选中数据库 2.表名&#xff0c;列名等一般不可以与关键字相同&#xff0c;如果确定相同&#xff0c;就必须用反引号引住 3.可以使用comment来增加字段说…

倒计时57天

3-1知识点续&#xff1a; 5. //给string设置大小&#xff1a; /* 1.s.resize(N):resize&#xff08;&#xff09;函数可以改变string的大小&#xff0c;并根据需要添加或删除字符。如果新的大小比当前大小大&#xff0c;将会在末尾添加字符&#xff1b;如果新的大小比当前大小…