CCF-(201709-2)公共钥匙盒-C语言(100分)

在这里插入图片描述在这里插入图片描述
把拿钥匙、取钥匙分别作为事件存储,并按照时间点进行排序,然后按顺序处理事件即可。
这里要注意,同一时间点的事件,先归还后借出钥匙,同样是归还钥匙则按钥匙编号排序处理。代码如下:

#include <stdio.h>

typedef struct KEY_USAGE{
    int num;
    int get_return;//-1:get 1:return
    int time;
}key_usage;

void swap(key_usage *u1,key_usage *u2){
    key_usage a;
    a.num=u1->num;
    a.get_return=u1->get_return;
    a.time=u1->time;
    *u1=*u2;
    *u2=a;
}

void sorting(key_usage usage[],int n){
    int i,j;
    for(i=0;i<n-1;i++){
        for(j=n-1;j>i;j--){
            if(usage[j-1].time>usage[j].time){
                swap(&usage[j-1],&usage[j]);
            }
            else if(usage[j-1].time==usage[j].time){
                if(usage[j-1].get_return<usage[j].get_return){
                    swap(&usage[j-1],&usage[j]);
                }
                else if(usage[j-1].get_return==usage[j].get_return)
                    if(usage[j-1].num>usage[j].num){
                        swap(&usage[j-1],&usage[j]);
                    }
            }
        }
    }
}

int main(){
    int N,K,i,j,w,s,c;
    scanf("%d%d",&N,&K);
    key_usage usage[K*2];
    int *key;
    key=(int *)calloc(N,sizeof(int));
    for(i=0;i<N;i++){
        key[i]=i+1;
    }
    for(i=0;i<K*2;i+=2){
        scanf("%d%d%d",&w,&s,&c);
        usage[i].num=w;
        usage[i].get_return=-1;
        usage[i].time=s;

        usage[i+1].num=w;
        usage[i+1].get_return=1;
        usage[i+1].time=s+c;
    }
    sorting(usage,K*2);
    for(i=0;i<K*2;i++){
        if(usage[i].get_return==-1){//Get
            for(j=0;j<N;j++)
                if(key[j]==usage[i].num){
                    key[j]=0;
                    break;
                }
        }
        else{//Return
            for(j=0;j<N;j++){
                if(key[j]==0){
                    key[j]=usage[i].num;
                    break;
                }
            }
        }
    }
    for(i=0;i<N-1;i++){
        printf("%d ",key[i]);
    }
    printf("%d",key[i]);
    return 0;
}
发布了33 篇原创文章 · 获赞 11 · 访问量 8456

猜你喜欢

转载自blog.csdn.net/qq_40825479/article/details/105559779