【CCF-CSP】201709-2-公共钥匙盒100分(含详细注释)

简介: 【CCF-CSP】201709-2-公共钥匙盒100分(含详细注释)

代码如下:

#include <iostream>
#include <algorithm>//sort()函数头文件 
using namespace std;
#define N 1002
typedef struct Key{
  int name;//钥匙序号 
  int begin;//开始时间 
  int time;//持续时间 
  int flag=0;//flag=1:此借出、归还操作已执行 
}Key;
bool BeginCmp(Key first,Key second){//按起始时间从小到大排序 
  return first.begin<second.begin;
} 
bool EndCmp(Key first,Key second){
  if(first.begin+first.time==second.begin+second.time) { return first.name<second.name;}//同一时间还,序号小的钥匙先还入
  else return first.begin+first.time<second.begin+second.time;
} 
int main(){
  int n,k;//n把钥匙,k位老师操作
  cin>>n>>k;
  int Num[N]; 
  for(int i=0;i<n;i++){//初始化钥匙存放序号Num()数组 
    Num[i]=i+1;
  }
  Key key[k];
  for(int i=0;i<k;i++){//输入老师的操作信息 
    cin>>key[i].name>>key[i].begin>>key[i].time;
  }
  sort(key,key+k,BeginCmp);
  int BeginTimeFlag=key[0].begin;//最早开始时间 
  sort(key,key+k,EndCmp); 
  int EndTimeFlag=key[k-1].begin+key[k-1].time;//最晚结束时间 
  //cout<<BeginTimeFlag<<" "<<EndTimeFlag<<endl;
  for(int i=BeginTimeFlag;i<=EndTimeFlag;i++){//对时间遍历 
    for(int j=0;j<k;j++){//对操作遍历 
      if(key[j].flag==0){//key[j].flag==0,说明k[j]的借出、归还操作未全执行一次 
        if(key[j].begin+key[j].time==i){  //到达钥匙j的归还还时间 
          for(int x=0;x<n;x++){//将钥匙j存入最小的空钥匙挂钩上 
            if(Num[x]==0){
            Num[x]=key[j].name;//放入钥匙 
            key[j].flag=1;//key[j]的借出、归还操作已执行完毕,key[j].flag赋值为1,后续不需执行
            break; 
            }
          } 
        } 
        else if(key[j].begin==i){//到达钥匙j的借出时间 
          for(int x=0;x<n;x++){
            if(Num[x]==key[j].name){
              Num[x]=0;//借出钥匙,钥匙盒中此位置为0 
              break;//后续循环内容不需执行 
            }
          } 
        }
      }     
    }
  }
  for(int i=0;i<n;i++){
    cout<<Num[i]<<" ";
  } 
  return 0;
}

image.gif

题目如下:

image.gif编辑

目录
相关文章
【CCF-CSP】202009-2风险人群筛查100分(含详细注释)
【CCF-CSP】202009-2风险人群筛查100分(含详细注释)
282 0
【CCF-CSP】202009-2风险人群筛查100分(含详细注释)
【CCF-CSP】201812-2-小明放学100分(含详细注释)
【CCF-CSP】201812-2-小明放学100分(含详细注释)
133 0
【CCF-CSP】201812-2-小明放学100分(含详细注释)
【CCF-CSP】201712-1-最小差值100分(含详细注释)
【CCF-CSP】201712-1-最小差值100分(含详细注释)
142 0
【CCF-CSP】201712-1-最小差值100分(含详细注释)
【CCF-CSP】202109-1-数组推导100分(含详细注释)
【CCF-CSP】202109-1-数组推导100分(含详细注释)
175 0
【CCF-CSP】202109-1-数组推导100分(含详细注释)
|
存储
【CCF-CSP】201712-2游戏100分(含思路解释、详细注释)
【CCF-CSP】201712-2游戏100分(含思路解释、详细注释)
139 0
【CCF-CSP】201712-2游戏100分(含思路解释、详细注释)
【CCF-CSP】201809-1-卖菜100分(含详细注释)
【CCF-CSP】201809-1-卖菜100分(含详细注释)
80 0
第五十二章 开发自定义标签 - Using csr %CSP.AbstractAtom Write Methods
第五十二章 开发自定义标签 - Using csr %CSP.AbstractAtom Write Methods
61 0
|
JavaScript 编译器 Go
第五十一章 开发自定义标签 - 使用%CSP.Rule方法
第五十一章 开发自定义标签 - 使用%CSP.Rule方法
71 0
|
SQL JavaScript 前端开发
第三十六章 使用 CSP 进行基于标签的开发 - 使用尽可能少的#server和#call调用
第三十六章 使用 CSP 进行基于标签的开发 - 使用尽可能少的#server和#call调用
115 0
|
JavaScript 前端开发 Go
第三十四章 使用 CSP 进行基于标签的开发 - Hyperevent例子
第三十四章 使用 CSP 进行基于标签的开发 - Hyperevent例子
96 0