技术标签: 算法
问题描述
有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。
钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙。
每次取钥匙的时候,老师们都会找到自己所需要的钥匙将其取走,而不会移动其他钥匙。每次还钥匙的时候,还钥匙的老师会找到最左边的空的挂钩,将钥匙挂在这个挂钩上。如果有多位老师还钥匙,则他们按钥匙编号从小到大的顺序还。如果同一时刻既有老师还钥匙又有老师取钥匙,则老师们会先将钥匙全还回去再取出。
今天开始的时候钥匙是按编号从小到大的顺序放在钥匙盒里的。有K位老师要上课,给出每位老师所需要的钥匙、开始上课的时间和上课的时长,假设下课时间就是还钥匙时间,请问最终钥匙盒里面钥匙的顺序是怎样的?
输入格式
输入的第一行包含两个整数N, K。
接下来K行,每行三个整数w, s, c,分别表示一位老师要使用的钥匙编号、开始上课的时间和上课的时长。可能有多位老师使用同一把钥匙,但是老师使用钥匙的时间不会重叠。
保证输入数据满足输入格式,你不用检查数据合法性。
输出格式
输出一行,包含N个整数,相邻整数间用一个空格分隔,依次表示每个挂钩上挂的钥匙编号。
样例输入
5 2
4 3 3
2 2 7
样例输出
1 4 3 2 5
样例说明
第一位老师从时刻3开始使用4号教室的钥匙,使用3单位时间,所以在时刻6还钥匙。第二位老师从时刻2开始使用钥匙,使用7单位时间,所以在时刻9还钥匙。
每个关键时刻后的钥匙状态如下(X表示空):
时刻2后为1X345;
时刻3后为1X3X5;
时刻6后为143X5;
时刻9后为14325。
样例输入
5 7
1 1 14
3 3 12
1 15 12
2 7 20
3 18 12
4 21 19
5 30 9
样例输出
1 2 3 5 4
评测用例规模与约定
对于30%的评测用例,1 ≤ N, K ≤ 10, 1 ≤ w ≤ N, 1 ≤ s, c ≤ 30;
对于60%的评测用例,1 ≤ N, K ≤ 50,1 ≤ w ≤ N,1 ≤ s ≤ 300,1 ≤ c ≤ 50;
对于所有评测用例,1 ≤ N, K ≤ 1000,1 ≤ w ≤ N,1 ≤ s ≤ 10000,1 ≤ c ≤ 100。
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int key[1001];
int n;
struct Teacher
{
int id; //表示钥匙的编号
int time; //表示借或还钥匙的时刻
} get[1001], back[1001]; //get表示借,back表示还
int cmp(Teacher a, Teacher b)
{
if(a.time == b.time)
return a.id < b.id;
return a.time < b.time;
}
void get_key(int id)
{
int i;
for(i = 1; i <= n; i++)
{
if(key[i] == id)
{
key[i] = 0;
break;
}
}
}
void back_key(int id)
{
int i;
for(i = 1; i <= n; i++)
{
if(key[i] == 0)
{
key[i] = id;
break;
}
}
}
int main()
{
int k, w, s, c, i, j;
scanf("%d %d", &n, &k);
for(i = 1; i <= n; i++)
key[i] = i;
for(i = 1; i <= k; i++)
{
scanf("%d %d %d", &w, &s, &c);
get[i].id = w;
get[i].time = s;
back[i].id = w;
back[i].time = s + c;
}
sort(get + 1, get + 1 + k, cmp);
sort(back + 1, back + 1 + k, cmp);
i = 1;
j = 1;
while(i <= k || j <= k)
{
if(i <= k && get[i].time < back[j].time)
{
get_key(get[i].id);
i++;
}
else
{
back_key(back[j].id);
j++;
}
}
for(i = 1; i <= n; i++)
printf("%d ", key[i]);
return 0;
}
文章浏览阅读382次。jndi JNDI代表Java命名和目录接口。 它是一种API,用于提供对目录服务的访问,即,目录与对象的服务映射名称(字符串),对远程对象或简单数据的引用。 这就是所谓的约束力。 绑定集称为上下文。 应用程序使用JNDI接口访问资源。 简而言之,它就像一个带有String键和代表Web资源的Object值的hashmap。 通常,这些资源是根据目录服务中的层次结构组织的。 级别用分隔符定义(..._jndi spi
文章浏览阅读393次。2、将下载下来的包解压到电脑磁盘上,例如:E:\tools\java\maven\apache-maven-3.5.03、配置用户变量MAVEN_HOME以及path系统变量4、打开DOS,输入命令mvn -v查看是否安_maven项目下载插件eclipse.buildid=3.8.1.201607290850-release-e46 java.version
文章浏览阅读648次。经典笔试迷宫、格子那种问题,以前一直懒得做这种题,终于笔试碰到了,只过了0.18,赶紧补一下。牛客:https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc?tpId=37&&tqId=21266&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking定义一个二维数组N*M(其中2<=N<=10;2<=M<=_wind小猫迷宫笔试题
文章浏览阅读253次。import pandas as pdimport torchimport numpy as npimport matplotlib.pyplot as pltfrom torch import nndata = pd.read_csv("dataset/Income1.csv")print("data.info:\t", data.info)X = torch.from_numpy(data.Education.values.reshape(-1, 1).astype(np.float32_import torch import numpy as np import matplotlib.pyplot as plt import panda
文章浏览阅读1k次。mysql学习创建表的时候 晋江加上 create_time字段,为create_time设置默认值CURRENT_TIMESTAMPCRUD操作Create( 增 )单条插入INSERT INTO 表名(字段1,字段2,...) VALUES(值1,值2,...)INSERT INTO class_1(name) VALUES('张三');多条插入INSERT INTO 表名(字段1,字段2,...) VALUES(值1,值2,...),(值1,值2,...)INSER_mysql删除集合
文章浏览阅读1.2w次,点赞9次,收藏52次。深度学习中冻结训练和解冻训练的区别_冻结训练和解冻训练
文章浏览阅读8.4k次,点赞10次,收藏39次。接触单片机有几年的时间了,一直专注于如何在单片机上写一些应用,对单片机如何启动的知之甚少,惭愧惭愧。。。今天得空整理了一下,加深了对单片机的认识,如为什么定义data区里的变量重新开机的初始值为0。单片机在开机上电后,会执行startup.A51的指令,我分析了一下某个项目中这个文件里的指令,在这里单片机会做如下几件事情:初始化8051硬件堆栈的大小和堆栈指针;初始化中断向量表,分配每个中断的入_startup.a51 中断
文章浏览阅读2k次。使用规则创建外出邮件只有某些帐户类型才支持自动答复(外出)功能。 如果未看到“自动答复”按钮,则表示该电子邮件帐户不支持此功能。 但是,如果在外出期间让 Outlook 继续运行,则可使用规则自动答复电子邮件。 通过规则还可将电子邮件转发到另一帐户、将邮件标记为已读或自动将其移动到文件夹。 有关使用规则的详细信息,请参阅使用规则管理电子邮件。外出时使用规则答复收到的电子邮件在 Outlook 中单击“文件”后,屏幕应如下所示:如果看到显示“自动答复”的按钮,请参阅从 Outloo_outlook无法从服务器获得自动答复设置
文章浏览阅读50次。input:-webkit-autofill,textarea:-webkit-autofill,select:-webkit-autofill{-webkit-box-shadow:000px1000pxwhiteinset!important;background-color:rgb(0,0,0)!important;..._qupath-0.1.2.dmg怎么修改荧光通道颜色
文章浏览阅读283次。RewardLayout仿斗鱼送礼物效果本项目旨在提供实现参考,交流学习。关于我,欢迎关注有问题及时issue pr 或 email如果对你有点帮助的话,点个star哦~Screenshots效果展示: Getting startedAdd it in your root build.gradle at the end of repositories:allprojects {repositori..._android 礼物连击动画
文章浏览阅读622次。你知道什么叫真正的拨号上网吗?_网络速度发展史
文章浏览阅读1k次,点赞16次,收藏19次。大家好,小编为大家解答python爬虫爬取天气数据讲解的问题。很多人还不知道如何用python爬取天气预报,现在让我们一起来看看吧!_python爬虫天气预报