CCF201709-2公共钥匙盒(C语言100分,使用C++sort函数)_公共钥匙盒ccfc++语言-程序员宅基地

技术标签: 算法  

题目

问题描述
  有一个学校的老师共用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;
} 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44589540/article/details/108522147

智能推荐

jndi_什么是JNDI,SPI,CCI,LDAP和JCA?-程序员宅基地

文章浏览阅读382次。jndi JNDI代表Java命名和目录接口。 它是一种API,用于提供对目录服务的访问,即,目录与对象的服务映射名称(字符串),对远程对象或简单数据的引用。 这就是所谓的约束力。 绑定集称为上下文。 应用程序使用JNDI接口访问资源。 简而言之,它就像一个带有String键和代表Web资源的Object值的hashmap。 通常,这些资源是根据目录服务中的层次结构组织的。 级别用分隔符定义(..._jndi spi

eclipse安装maven插件_maven项目下载插件eclipse.buildid=3.8.1.201607290850-rele-程序员宅基地

文章浏览阅读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

迷宫笔试题_wind小猫迷宫笔试题-程序员宅基地

文章浏览阅读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小猫迷宫笔试题

Pytorch极简入门教程(三)—— 入门实例_import torch import numpy as np import matplotlib.-程序员宅基地

文章浏览阅读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

mysql之增删改查和集合操作_mysql删除集合-程序员宅基地

文章浏览阅读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次。深度学习中冻结训练和解冻训练的区别_冻结训练和解冻训练

随便推点

8051 MCU学习之分析单片机的启动过程_startup.a51 中断-程序员宅基地

文章浏览阅读8.4k次,点赞10次,收藏39次。接触单片机有几年的时间了,一直专注于如何在单片机上写一些应用,对单片机如何启动的知之甚少,惭愧惭愧。。。今天得空整理了一下,加深了对单片机的认识,如为什么定义data区里的变量重新开机的初始值为0。单片机在开机上电后,会执行startup.A51的指令,我分析了一下某个项目中这个文件里的指令,在这里单片机会做如下几件事情:初始化8051硬件堆栈的大小和堆栈指针;初始化中断向量表,分配每个中断的入_startup.a51 中断

Outlook-没有自动回复-使用规则创建外出邮件_outlook无法从服务器获得自动答复设置-程序员宅基地

文章浏览阅读2k次。使用规则创建外出邮件只有某些帐户类型才支持自动答复(外出)功能。 如果未看到“自动答复”按钮,则表示该电子邮件帐户不支持此功能。 但是,如果在外出期间让 Outlook 继续运行,则可使用规则自动答复电子邮件。 通过规则还可将电子邮件转发到另一帐户、将邮件标记为已读或自动将其移动到文件夹。 有关使用规则的详细信息,请参阅使用规则管理电子邮件。外出时使用规则答复收到的电子邮件在 Outlook​​ 中单击“文件”后,屏幕应如下所示:如果看到显示“自动答复”的按钮,请参阅从 Outloo_outlook无法从服务器获得自动答复设置

修改input框默认黄色背景-程序员宅基地

文章浏览阅读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怎么修改荧光通道颜色

android 斗鱼礼物动画,GitHub - zy841336855/RewardLayout: 仿斗鱼直播送礼物和连击效果动画...-程序员宅基地

文章浏览阅读283次。RewardLayout仿斗鱼送礼物效果本项目旨在提供实现参考,交流学习。关于我,欢迎关注有问题及时issue pr 或 email如果对你有点帮助的话,点个star哦~Screenshots效果展示: Getting startedAdd it in your root build.gradle at the end of repositories:allprojects {repositori..._android 礼物连击动画

你知道网速的发展史吗? 80年代的我们是这样上网的!_网络速度发展史-程序员宅基地

文章浏览阅读622次。你知道什么叫真正的拨号上网吗?_网络速度发展史

如何用python爬取天气预报,基于python网络爬虫天气_python爬虫天气预报-程序员宅基地

文章浏览阅读1k次,点赞16次,收藏19次。大家好,小编为大家解答python爬虫爬取天气数据讲解的问题。很多人还不知道如何用python爬取天气预报,现在让我们一起来看看吧!_python爬虫天气预报

推荐文章

热门文章

相关标签