CCF CSP真题——201709-2 公共钥匙盒

本文分享了作者在解决CCF CSP2017年9月第二题——公共钥匙盒的问题时,从最初的复杂代码到优化后的简洁思路。文章介绍了模拟题目的关键步骤,包括理解逻辑、处理输入、模拟操作和输出结果。通过使用C++标准库的set来管理钥匙归还,并按时间线进行操作,最终实现了40行的满分代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        本题为CCF CSP2017年9月题目的第二题。我第一次做这道题的时候,使用了结构体,以及许多vector,以至于逻辑分析的时候因为名字太多,自己都感觉很累。虽然最后成功做出,提交满分,但一直不是很满意。于是过了一阵子(也就是最近)又做了一遍,理顺了思路,终于把冗长的代码简化(80~90行→40行),所以现在想要来分享一下我做这题的思路,并给出提交得到满分的C++代码。题目不贴,我认为看到本文的应该已经提交过至少一次该题的程序了,所以我会直接分享我的思路,也因此不建议没做过本题的童鞋看本篇文章。

        碰到这样的模拟题,一般都要把题目读完,并且从中理顺逻辑,具体的流程应该是怎么样的。题目中使用&归还钥匙的要点如下:

        (1)取钥匙的时候,老师们都会找到自己所需要的钥匙将其取走,不会移动其他钥匙。这个非常好理解,keys[pos] = -1即可。

        (2)还钥匙的时候,还钥匙的老师会找到最左边的空的挂钩,将钥匙挂在这个挂钩上。这个也没问题,关键是找到位置。

        (3)如果有多位老师还钥匙,则他们按钥匙编号从小到大的顺序还。这意思就是,同一时刻可能有多个老师还钥匙,因此要维护一个表,存储当前时刻所归还的钥匙的编号,并且还要从小到大排序。因为钥匙肯定不会重复,所以使用C++标准库的set可以非常方便地实现这个需求。另外,这也提醒了我们,还钥匙可能多人同时还,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值