• 公共钥匙盒(我佛了 终于AC了)


     
    试题编号: 201709-2
    试题名称: 公共钥匙盒
    时间限制: 1.0s
    内存限制: 256.0MB
    问题描述:
    问题描述
      有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。
      钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙。
      每次取钥匙的时候,老师们都会找到自己所需要的钥匙将其取走,而不会移动其他钥匙。每次还钥匙的时候,还钥匙的老师会找到最左边的空的挂钩,将钥匙挂在这个挂钩上。如果有多位老师还钥匙,则他们按钥匙编号从小到大的顺序还。如果同一时刻既有老师还钥匙又有老师取钥匙,则老师们会先将钥匙全还回去再取出。
      今天开始的时候钥匙是按编号从小到大的顺序放在钥匙盒里的。有K位老师要上课,给出每位老师所需要的钥匙、开始上课的时间和上课的时长,假设下课时间就是还钥匙时间,请问最终钥匙盒里面钥匙的顺序是怎样的?
    输入格式
      输入的第一行包含两个整数NK
      接下来K行,每行三个整数wsc,分别表示一位老师要使用的钥匙编号、开始上课的时间和上课的时长。可能有多位老师使用同一把钥匙,但是老师使用钥匙的时间不会重叠。
      保证输入数据满足输入格式,你不用检查数据合法性。
    输出格式
      输出一行,包含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 ≤ NK ≤ 10, 1 ≤ w ≤ N, 1 ≤ sc ≤ 30;
      对于60%的评测用例,1 ≤ NK ≤ 50,1 ≤ w ≤ N,1 ≤ s ≤ 300,1 ≤ c ≤ 50;
      对于所有评测用例,1 ≤ NK ≤ 1000,1 ≤ w ≤ N,1 ≤ s ≤ 10000,1 ≤ c ≤ 100。
     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 const int KeyNum = 1001;
     6 int key[KeyNum];
     7 int kp[KeyNum];//记录钥匙所放的位置 
     8  
     9 struct teacher{
    10     int id;
    11     int _time;
    12 };
    13 
    14 bool cmp(teacher a,teacher b){
    15     if(a._time==b._time){
    16         return a.id < b.id;
    17     }
    18     return a._time<b._time;
    19 }
    20 
    21 void re(int id,int k){//挂钥匙函数 ,还钥匙 
    22     for(int i=1; i<=k; i++){
    23         if(key[i]==0){
    24             key[i] = id;
    25             //cout<<id<<"号钥匙已还在"<<i<<"号挂钩
    "; 
    26             kp[id] = i;//n号钥匙放在i号挂钩处
    27             break;//及时跳出,以免n号钥匙挂满所有的空钥匙钩 
    28         }
    29     }
    30     return;
    31 }
    32 int main() {
    33     struct teacher t1[1001],t2[1001];
    34     int n,k;
    35     int w,s,c;
    36     std::ios::sync_with_stdio(false);
    37     cin>>n>>k;
    38     //cout<<"weishenme???
    ";
    39     for(int i=1; i<=n; i++){//初始化数组key 
    40         key[i] = i;
    41         kp[i] = i;
    42         //cout<<"AAAA
    ";
    43     }
    44     for(int i=0; i<k; i++){
    45         //cout<<"输入循环:"<<i<<endl;
    46         cin>>w>>s>>c;
    47         t1[i].id = w;
    48         t1[i]._time = s;
    49         t2[i].id = w;
    50         t2[i]._time = s+c;
    51         //cout<<t1[i].id<<" "<<t1[i]._time<<endl;
    52     }
    53     //cout<<"11111111
    ";
    54     sort(t1,t1+k,cmp);
    55     sort(t2,t2+k,cmp);
    56     /*cout<<"开始
    ";
    57     for(int i=0; i<k; i++){
    58         cout<<t1[i].id<<" "<<t1[i]._time<<endl;
    59     }
    60     for(int i=0; i<k; i++){
    61         cout<<t2[i].id<<" "<<t2[i]._time<<endl;
    62     }
    63     cout<<"结束
    ";*/
    64     //cout<<"k= "<<k<<endl;
    65     int end_time = t2[k-1]._time;
    66     //cout<<"end_time"<<end_time<<endl; 
    67     //cout<<"2222222
    ";
    68     for(int i=0; i<=end_time; i++) {
    69         //cout<<"处理循环:"<<i<<endl;
    70         for(int j=0; j<k; j++){//先还再取 
    71             if(t2[j]._time==i){//还钥匙 
    72                 re(t2[j].id,n);//这个地方是真坑,写的时候没注意
    73                 //cout<<"还钥匙:"<<t2[j].id<<endl<<"还钥匙时间:"<<t2[j]._time<<endl;
    74             }    
    75         }
    76         
    77         for(int j=0; j<k; j++){//取钥匙 
    78             if(t1[j]._time==i){
    79                 key[kp[t1[j].id]] = 0;
    80                 //cout<<"kp[t1[j].id]= "<<kp[t1[j].id]<<endl; 
    81                 //cout<<"取钥匙:"<<t1[j].id<<endl<<"取钥匙时间:"<<t1[j]._time<<endl;
    82             }
    83         }
    84     
    85     }
    86     //cout<<"处理循环结束
    ";
    87     for(int i=1; i<=n; i++){
    88         cout<<key[i]<<" ";
    89     }
    90     //cout<<"@@@@"<<endl;
    91     return 0;
    92 }
    View Code

    代码有点乱

  • 相关阅读:
    搭建非域AlwaysOn win2016+SQL2016
    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
    四、基于Windows 2012配置SQL Server 2014 AlwaysOn
    三、安装SQLserver 2014(For AlwaysOn)
    二、 Windows 2012配置故障转移(For SQLServer 2014 AlwaysOn)
    Mybatis-SQL语句构建器类及日志
    Mybatis-JavaAPI
  • 原文地址:https://www.cnblogs.com/yu-xia-zheng-ye/p/11545463.html
Copyright © 2020-2023  润新知