转载自 http://blog.csdn.net/qq_30091945 https://blog.csdn.net/qq_30091945/article/details/78378223



#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;typedef struct Action{                             int room;int time;       int type;                                      //0为还钥匙,1为取钥匙
}Action;int cmp(Action action1,Action action2){            //将action中记录从小到大进行类似基数排序if(action1.time < action2.time){               //先按照行为发生时间排序(时间早的在前) return 1;}else if(action1.time == action2.time&& action1.type < action2.type){               //行为时刻相同,再按取还钥匙排序(同时有老师还取钥匙,还钥匙的在前) return 1;}else if(action1.time == action2.time&& action1.type == action2.type&& action1.room < action2.room){               //时刻相同,行为相同,按钥匙序号排序 (序号小的在前) return 1;   }return 0;                                      //否则action2排在前
}int N,K;                                           //N教室数 K老师人数
int room,start,time;                               //教室号,上课时间,上课时长
int state[1001];                                   //钥匙数组,因为下面是从state[1]开始定义钥匙编号,所以将数组最大长度设为1001
vector<Action> actions;                            //定义动态数组 int main()
{   while(cin>>N>>K){                              //输入教室数量N,老师数量K for(int i = 1 ; i <= N ; i++){state[i] = i;                          //给每把钥匙编号 }for(int i = 0 ; i < K ; i++){              //将所有老师循环一遍 cin>>room>>start>>time;                //输入教室号,上课时间,上课时长 Action action;                         action.room = room;                    //要取的钥匙号 action.time = start;                   //取钥匙时间 action.type = 1;                       //每位老师先是取钥匙 actions.push_back(action);             //将代表取钥匙这一行为结构体放入数组 action.type = 0;                       //用完要还钥匙 action.time = start+time;              //还钥匙时间 actions.push_back(action);             //将代表还钥匙这一行为放入数组 ;此时数组中记录为2*k条 }sort(actions.begin(),actions.end(),cmp);   //比较action数组中记录 for(int i = 0 ; i < actions.size(); i++){  //遍历action中所有记录 Action action = actions[i];            //从第1个开始(数组下标为0) if(action.type == 0){                  //如果是还钥匙   ;先判断action.type == 0表示当同时有多位老师还取钥匙时,保证先还后取 for(int j = 1 ; j <= N ; j++){     if(state[j] == -1){            //如果j号钥匙被取走了;j是从左往右第一个被取走钥匙的编号,即第一个空挂钩 state[j] = action.room;    //把钥匙放到第j个挂钩上 break;                     //还完钥匙,要跳出for循环,不然所有空挂钩都会放上编号为action.room的钥匙 }}}else{                                 //如果是取钥匙for(int j = 1 ; j <= N ; j++){     if(state[j] == action.room){   //如果第j把钥匙是该老师要用的 state[j] = -1;             //取走钥匙,标记该挂钩为空 break;                     //如果已经找到符合的钥匙,就不用再遍历剩下的钥匙了 }}}}for(int i = 1 ; i <= N ; i++){cout<<state[i]<<" ";                   //输出最终钥匙顺序 }}return 0;
}

呜呜呜,搞不定,,,找到这位大神编写的,一点一点加上注释顺下来的。

201709-2公共钥匙盒相关推荐

  1. ccf公共钥匙盒python_CCF python 201709-2 公共钥匙盒

    基本思路: 将所有的时间节点(借钥匙时间,还钥匙时间)组织到一个列表里[钥匙号,时间,借or还] 并将之按时间的升序.还优先借.钥匙号的升序排列 那么所要做的就是遍历这个列表: ····如果是借就 · ...

  2. CSP CCF 201709-2 公共钥匙盒(C++)满分代码,有注释

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

  3. 公共钥匙盒(排序CCF)

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

  4. 【CCF】201709-2公共钥匙盒

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

  5. CCF201709-2 公共钥匙盒

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

  6. CCF201709-2 公共钥匙盒(100分)【模拟+优先队列】

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

  7. CCF CSP 公共钥匙盒 JAVA 201709-2 100分

    这道题做了几遍 感觉这次做得比较好的就是做好了每个函数的封装 无非使用了二维数组的排序  就变成了很简单的一道题 package csp2017_09_2;import java.util.Array ...

  8. csp ccf公共钥匙盒

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

  9. CCF CSP 公共钥匙盒

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

  10. CCF计算机认证考试201709-2:公共钥匙盒 非算法弱鸡版

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

最新文章

  1. 自监督学习新思路!基于蒸馏损失的自监督学习算法 | CVPR 2021
  2. 推荐 | Pair,医学图像标注神器
  3. 【题解】P1419 寻找段落(二分+单调队列)难度⭐⭐⭐★
  4. sealos包管理使用
  5. html5教学文档笔记,4.HTML 教程- (HTML5 基础)
  6. c++动态绑定的技术实现
  7. 微课|中学生可以这样学Python(例4.7):定时器
  8. [转载] Python Numpy
  9. sqlserver2005身份验证
  10. Linux的syscall源码,Linux内核跟踪之syscall tracer
  11. cad详图怎么画_CAD标准图框怎么画
  12. MIP实操指南,你真的需要配置吗?
  13. 无法在节点上执行物理内存检查
  14. 百度搜索引擎结果网址参数键盘重复速度(rsv_sug3)
  15. iptables的三表五链
  16. 修复鼠标单击变双击的问题
  17. 教你怎么学好Java
  18. Java collection集合截断
  19. 2. WordCount案例实操
  20. python 入门学习教程笔记-- BMR 计算器

热门文章

  1. mpvue微信小程序动画_mpvue 与微信小程序的火花
  2. 下一代 TGW 从13Mpps到50Mpps性能优化之旅
  3. python 语料_用python将语料转化为可计算的形式
  4. Docker-compose编排MySQL+Nacos+Seata
  5. SpringBoot打开resources目录下的文件操作
  6. Taq DNA聚合酶的种类与应用现状
  7. 开源: CVPR 2020 修复你的老照片
  8. 趣头条视频解析去水印原理分析过程及源码,简单又有趣
  9. element-ui的文本框 input加㎡平方米符号
  10. VScode代码格式化及语法检测