#JLT08A. 2026年J组模拟赛10连测第8场-T1 程老师的打卡机
2026年J组模拟赛10连测第8场-T1 程老师的打卡机
| 项目 | 说明 |
|---|---|
| 目录 | attend |
| 可执行文件名 | attend.cpp |
| 输入文件 | attend.in |
| 输出文件 | attend.out |
| 每个测试点时限 | 1.0 秒 |
| 内存限制 | 512 MiB |
| 测试点数目 | 20 |
| 测试点是否等分 | 是 |
题目描述
程老师上课的机房门口装着一台打卡机。这台机器只认卡片:程老师每天进门时刷一次卡,离开时再刷一次卡,机器把这两次刷卡的时刻各记一行,写成一个 HH:MM 形式的字符串,两个数字是小时,一个冒号,再两个数字是分钟;小时从 00 到 23,分钟从 00 到 59。同一行记录里的两个时刻属于同一天,离开的时刻不会早于进门的时刻。机器不记日期,也不记别的什么,这一天就留下这么两个时刻。
到了月底,程老师要把这些记录折算成能对上账的数字,折算的口径是这样的。对某一天,先看两个时刻本身相隔多少分钟,这个分钟数叫做这一天的时长。接着看这两个时刻有没有踩线:进门时刻晚于 09:00 的,这一天记作迟到,从时长里扣掉 30 分钟;离开时刻早于 18:00 的,这一天记作早退,再从时长里扣掉 30 分钟。这两条各判各的,一天可以既迟到又早退,两笔扣减都要记。每扣完一笔,如果当天的分钟数已经不足 0,就把这一天的数字按 0 分钟记,不再往下欠。这样定下来的分钟数,叫做这一天的有效工时。
程老师要的是两个数。第一个是这些天有效工时的总和,用 H:MM 的形式写出来:冒号前是总小时数,冒号后是总分钟数,分钟数不足两位时在前面补 0,小时数是多少就写多少,不补前导零,也不必落在一整天之内。第二个是这些天里迟到的天数,迟到天数只看进门时刻是否晚于 09:00,与当天最终记了多少分钟无关。
现在给出程老师 天的刷卡记录,请你算出这 天的有效工时总和与迟到天数。
输入格式
从文件 attend.in 中读入数据。
第一行一个整数 ,表示记录的天数。
接下来 行,每行两个时刻字符串,格式为 HH:MM,中间用一个空格隔开,依次表示这一天的进门时刻和离开时刻。保证两个时刻都是合法时刻,且同一天内离开时刻不早于进门时刻。
输出格式
输出到文件 attend.out 中。
共两行。
第一行是这 天有效工时的总和,格式为 H:MM:冒号前为总小时数,冒号后为总分钟数(不足两位时补 0)。
第二行一个整数,表示这 天里迟到的天数。
数据范围
对于所有测试数据,保证:
- ;
- 每个时刻都是合法的
HH:MM,且同一天内离开时刻不早于进门时刻。
| 测试点 | 特殊性质 | |
|---|---|---|
| 1~2 | 无 | |
| 3~6 | ||
| 7~10 | ||
| 11~14 | ||
| 15~18 | ||
| 19 | A | |
| 20 | B |
特殊性质 A:每一天的进门时刻都不晚于 09:00,离开时刻都不早于 18:00。
特殊性质 B:每一天的进门时刻都晚于 09:00,离开时刻都早于 18:00。
2
08:50 18:10
09:20 19:00
18:30
1
1
12:00 13:00
0:00
1
样例解释
样例 1:第一天从 08:50 到 18:10,两个时刻相隔 9 小时 20 分钟,也就是 560 分钟;进门不晚于 09:00、离开不早于 18:00,两笔扣减都不触发,有效工时 560 分钟。第二天从 09:20 到 19:00,相隔 580 分钟;进门晚于 09:00,扣 30 分钟得 550 分钟,离开不早于 18:00,不再扣。两天合计 分钟,即 18 小时 30 分钟,写作 18:30;迟到的是第二天,共 1 天。
样例 2:从 12:00 到 13:00 相隔 60 分钟。进门晚于 09:00,扣 30 分钟剩 30 分钟;离开早于 18:00,再扣 30 分钟,此时当天的分钟数已经不足 0,按 0 分钟记。总和写作 0:00,迟到 1 天。
- ID
- 3757
- 类型
- 传统题
- Time Limit
- 1000ms
- Memory Limit
- 512MiB
- 上传者
相关
在下列比赛中: