这是一道典型的模拟题

首先我们把借钥匙和还钥匙切分成两个事件 保存于两个数组中

然后我对还钥匙的活动按照时间发生次序和还得钥匙序号排序,即按照题意对事件发生的次序排序

最后按照时间的进行 一个一个进行活动的发生就ok啦

 #include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
struct T {
int id;
int _time;
};
const int N=+;
int x[N],p[N];// x 模拟钥匙盒 x[i]=j 表示i位置放置j x[i]=0表示空
// p[i]=j i钥匙放置的位置是j
T t1[N],t2[N];// t1[] 表示 要借钥匙的请求 (id和时间)
// t2[] 表示 要还的钥匙序号和时间
int n1,n2;// n1 表示下一个要借的钥匙
// n2 表示下一个要还的钥匙
int n,k;
bool cmp (T a, T b) {// 时间第一关键字 序号第二关键字
if (a._time==b._time)
return a.id<b.id;
return a._time<b._time;
}
void re ( int id ) {// 找到第一个空位置还书
for (int i=;i<=n;i++)
if (x[i]==) {
x[i]=id;
p[id]=i;
break;
}
return ;
}
int main ()
{
scanf ("%d %d",&n,&k);
for (int i=;i<=n;i++)
x[i]=p[i]=i;
for (int i=;i<=k;i++) {
int w,s,c;
scanf ("%d %d %d",&w,&s,&c);
T x1={w,s}; t1[i]=x1;
T x2={w,s+c}; t2[i]=x2;
}
sort (t1+,t1++k,cmp); n1=;
sort (t2+,t2++k,cmp); n2=;
int _start=t1[]._time;
int _end=t2[k]._time;
for (int i=_start;i<=_end;i++) {// 模拟时间的进行,进行活动的发生
while (n2<=k&&t2[n2]._time==i) { re (t2[n2].id); n2++; } //同一时间先还
while (n1<=k&&t1[n1]._time==i) { int pos=p[t1[n1].id]; x[pos]=; n1++;}
}
for (int i=;i<=n;i++)
printf ("%d ",x[i]);
printf ("\n");
return ;
}

ccf-170902-公共钥匙盒(模拟)的更多相关文章

  1. CCF 2017-09-2 公共钥匙盒

    CCF 2017-09-2 公共钥匙盒 题目 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室 ...

  2. CCF 201709-2公共钥匙盒

    问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中 ...

  3. 公共钥匙盒(CCF)【模拟】

    问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中 ...

  4. CCF(公共钥匙盒):思维+模拟

    公共钥匙盒 201709-2 这题的思路一开始不是很清晰,一开始想用贪心去做.但是发现按照题目的思路不对.所以这里采用的是类似于多项式的加减的处理. #include<iostream> ...

  5. CCF CSP 201709-2 公共钥匙盒

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-2 公共钥匙盒 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须 ...

  6. CCF 2017 09-02 公共钥匙盒

     CCF 2017 09-02 公共钥匙盒 1.用快速排序函数结合排序规则函数来给取放排序. 2.vector数组的强大功能. #include<iostream> #include< ...

  7. 公共钥匙盒 ccf

    试题编号: 201709-2 试题名称: 公共钥匙盒 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里, ...

  8. csp公共钥匙盒

    1.公共钥匙盒 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥 ...

  9. ccf-201709-2 公共钥匙盒

    问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中 ...

  10. CCF201709-2公共钥匙盒改进版

    问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中 ...

随机推荐

  1. Qt绘制文本一

    QPainterPath,使用 drawText且设置字体,再使用painter.drawText方式 效果图: void WgtText::paintEvent(QPaintEvent *event ...

  2. python截取字符串

    str = ‘0123456789’ print str[0:3] #截取第一位到第三位的字符 print str[:] #截取字符串的全部字符 print str[6:] #截取第七个字符到结尾 p ...

  3. 查验身份证 (15 分) 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

    // test4.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束.// #include "pch.h"#include <ios ...

  4. matlab 调试日志

    debug=; diary off if debug delete('log.txt'); !del log.txt diary('log.txt'); diary ON end diary OFF

  5. python 列表切片

    列表切片是python语言独有的特征,大大方便了我们的编码. 首先,在介绍切片之前,必须要知道一个知识,就是python列表的读写,下标可以使用负数. insert,get,set 操作均可传入负数下 ...

  6. LY.JAVA面向对象编程.工具类中使用静态、说明书的制作过程、API文档的使用过程

    2018-07-08 获取数组中的最大值 某个数字在数组中第一次出现时的索引 制作说明书的过程 对工具类的使用 获取数组中的最大值 获取数字在数组中第一次出现的索引值 API的使用过程 Math

  7. 尚学堂java 参考答案 第九章

    一.选择题 1.AC 解析:A.注意题目是Collections不是 Collection,前者是一个until下的类,后者才是接口 C.Set中的数据是无序且不能重复的 2.A 解析:将发生数组越界 ...

  8. mongdb使用

    下载mongodb数据库  https://www.mongodb.com/ 根据自己的电脑系统下载相应的版本 安装并且打开你下载的数据库 打开数据库bin文件夹:          cd soft/ ...

  9. UVA LA 3983 - Robotruck DP,优先队列 难度: 2

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  10. Yii2.0 数据库查询 [ 2.0 版本 ]

    下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的 ...