201709-2公共钥匙盒
转载自 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公共钥匙盒相关推荐
- ccf公共钥匙盒python_CCF python 201709-2 公共钥匙盒
基本思路: 将所有的时间节点(借钥匙时间,还钥匙时间)组织到一个列表里[钥匙号,时间,借or还] 并将之按时间的升序.还优先借.钥匙号的升序排列 那么所要做的就是遍历这个列表: ····如果是借就 · ...
- CSP CCF 201709-2 公共钥匙盒(C++)满分代码,有注释
问题描述 试题编号: 201709-2 试题名称: 公共钥匙盒 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共 ...
- 公共钥匙盒(排序CCF)
问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中 ...
- 【CCF】201709-2公共钥匙盒
试题编号: 201709-2 试题名称: 公共钥匙盒 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带 ...
- CCF201709-2 公共钥匙盒
问题描述: 试题编号: 201709-2 试题名称: 公共钥匙盒 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公 ...
- CCF201709-2 公共钥匙盒(100分)【模拟+优先队列】
试题名称:公共钥匙盒 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后, ...
- CCF CSP 公共钥匙盒 JAVA 201709-2 100分
这道题做了几遍 感觉这次做得比较好的就是做好了每个函数的封装 无非使用了二维数组的排序 就变成了很简单的一道题 package csp2017_09_2;import java.util.Array ...
- csp ccf公共钥匙盒
问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中 ...
- CCF CSP 公共钥匙盒
问题描述 试题编号: 201709-2 试题名称: 公共钥匙盒 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共 ...
- CCF计算机认证考试201709-2:公共钥匙盒 非算法弱鸡版
公共钥匙盒 题目: 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回 ...
最新文章
- 自监督学习新思路!基于蒸馏损失的自监督学习算法 | CVPR 2021
- 推荐 | Pair,医学图像标注神器
- 【题解】P1419 寻找段落(二分+单调队列)难度⭐⭐⭐★
- sealos包管理使用
- html5教学文档笔记,4.HTML 教程- (HTML5 基础)
- c++动态绑定的技术实现
- 微课|中学生可以这样学Python(例4.7):定时器
- [转载] Python Numpy
- sqlserver2005身份验证
- Linux的syscall源码,Linux内核跟踪之syscall tracer
- cad详图怎么画_CAD标准图框怎么画
- MIP实操指南,你真的需要配置吗?
- 无法在节点上执行物理内存检查
- 百度搜索引擎结果网址参数键盘重复速度(rsv_sug3)
- iptables的三表五链
- 修复鼠标单击变双击的问题
- 教你怎么学好Java
- Java collection集合截断
- 2. WordCount案例实操
- python 入门学习教程笔记-- BMR 计算器