CSP 201709-2 公共钥匙盒 好题

原题链接:CSP 201709-2 公共钥匙盒
学习博客:CCF CSP 201709-2 公共钥匙盒 思路分析和经验总结

#include <bits/stdc++.h>
using namespace std;

struct teacher
{
    int id;//钥匙编号
    int t;//取钥匙和还钥匙的时间点
    int type;//1为取钥匙 0为换钥匙
    teacher(int a,int b,int c)
    {
        id=a;  t=b;   type=c;
    }
    //在结构体里就提前排好序
    friend bool operator < (const teacher &t1,const teacher &t2)
    {
        if(t1.t!=t2.t)
            return t1.t<t2.t;
        else if(t1.t==t2.t && t1.type!=t2.type)
            return t1.type<t2.type;//果同一时刻既有老师还钥匙又有老师取钥匙,则老师们会先将钥匙全还回去再取出
        else if(t1.t==t2.t && t1.type==t2.type)
            return t1.id<t2.id;//如果有多位老师还钥匙,则他们按钥匙编号从小到大的顺序还
    }
};

int key[1010];
vector<teacher> tmp;

int main()
{
    std::ios::sync_with_stdio(false);
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        key[i]=i;
    }
    while(k--)
    {
        //钥匙编号、开始上课的时间和上课的时长
        int w,s,c;
        cin>>w>>s>>c;
        tmp.push_back(teacher(w,s,1));//取钥匙
        tmp.push_back(teacher(w,s+c,0));//还钥匙
    }
    sort(tmp.begin(),tmp.end());//排序
    for(int i=0;i<tmp.size();i++)
    {
        if(tmp[i].type==1)//取钥匙
        {
            for(int j=1;j<=n;j++)
            {
                if(key[j]==tmp[i].id)
                {
                    key[j]=0;
                    break;
                }
            }
        }
        else //取钥匙
        {
            for(int j=1;j<=n;j++)
            {
                if(key[j]==0)
                {
                    key[j]=tmp[i].id;
                    break;
                }
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        cout<<key[i]<<" ";
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值