码迷,mamicode.com
首页 > 其他好文 > 详细

CCF 2017 09-02 公共钥匙盒

时间:2018-02-27 01:18:57      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:size   ==   pos   .com   结合   stream   include   时间   钥匙   

 CCF 2017 09-02 公共钥匙盒

1.用快速排序函数结合排序规则函数来给取放排序。

2.vector数组的强大功能。

 1 #include<iostream>
 2 #include<vector> 
 3 #include<algorithm> 
 4 using namespace std;
 5 struct node{
 6     int num;//钥匙的编号 
 7     int start;//动作开始时间 
 8     int action;//动作的类型 0:放 1:取 
 9     node(){
10     }
11     node(int num,int start,int action):num(num),start(start),action(action){
12     }
13 };
14 
15 bool cmp(node a,node b)
16 { 
17     if(a.start != b.start) return a.start<b.start;///1.按照动作开始时间升序排列 
18     else{
19         ///2.如果时间相同,则先放后取
20         if(a.action != b.action) return a.action < b.action;
21         else{
22         ///3.如果时间相同且操作相同,则按照钥匙编号升序排队 
23         return a.num<b.num;
24         }
25     }
26 }
27 
28 int main()
29 {
30     int n,k;
31     while(cin>>n>>k)
32     {
33         vector<node> V;
34         vector<int> state(n+1); 
35         for(int i=1;i<=n;i++) state[i] = i;
36         for(int i=0;i<k;i++)
37         {
38             int num,start,len;
39             cin>>num>>start>>len;
40             V.push_back(node(num,start,1));//取走钥匙
41             V.push_back(node(num,start+len,0));
42         }
43         
44         ///按照起始时间升序排列 
45         sort(V.begin(),V.end(),cmp);
46         
47         for(int i=0;i<V.size();i++)
48         {
49             node u = V[i];
50             if(u.action == 1)//取走钥匙操作 
51             {
52                 for(int i=1;i<=n;i++)
53                     if(state[i] == u.num)
54                     {
55                         state[i] = -1;break;
56                     }    
57             }else{
58                 for(int i=1;i<=n;i++)
59                     if(state[i] == -1)
60                     {
61                         state[i] = u.num;break;
62                     }
63             }
64         }
65         
66         for(int i=1;i<=n;i++)
67         {
68             cout<<state[i];
69             if(i==n) cout<<endl;
70             else cout<<" ";
71         }
72     }
73     return 0;
74 }

技术分享图片

 

CCF 2017 09-02 公共钥匙盒

标签:size   ==   pos   .com   结合   stream   include   时间   钥匙   

原文地址:https://www.cnblogs.com/yxh-amysear/p/8476355.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!