CCF CSP真题——201712-3 Crontab

        我之前参加了这场考试,当时没做出来这道题。时隔一个月这题终于放了出来,于是马上再做了一次。不得不说真的很复杂。最终完成之际,决定记录与分享一下我的思路与代码(提交已通过)。

        题目的细节还是照旧不贴,但是我大致地描述一下:题目根据一个格式化输入,产生格式化的输出。

输入格式为“配置信息数 系统开始时间(包含) 系统结束时间(不包含)”

时间格式为“yyyymmddHHMM”

配置信息格式为“分钟 小时 日期 月份 星期 命令”,配置信息中的每一项可包含具体数字,英文缩写(不区分大小写),星号(*)表示任何取值,逗号(,)表示多个不同的取值,减号(-)表示区间。

输出格式为“时间 命令”,如果同一时刻有多条命令满足调度条件,则按照输入给出的顺序输出

       这道题有两种思路:(1)根据每个时间,判断能执行哪条命令;(2)根据每个命令,判断其运行时间,将其存储在vector中,然后对vector排序并输出。显然前者容易超时,所以我选择了后者。下面进行具体分析。

       1、首先考虑数据的存储方式。对于时间,由于输入数据的保证,将其存储为数字也可以在输出时不出现问题,并且可以使得处理更加方便,所以时间用long long(我在程序中定义为LL)存储。而配置信息的每个项很显然要用字符串存储了。至于存储“时间 命令”对的数据结构,由于同一时刻可能对应多条命令,并且此时要按照输入顺序输出,而不是命令的字母表顺序。所以不可以使用map,而只能用vector<pair<LL, int> >来存储“时间 序号”对,然后输出时把序号换成对应的命令。

       2、接下来是程序的流程。很明显关键的一步是如何根据配置信息的各个项

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值