3 solutions
-
0
题目描述
某高科技公司为员工提供智慧打卡系统,记录员工每日的进出门禁时间。为计算员工的实际工作时长,考虑以下规则:离岗时间不超过 15 分钟的,不扣除工作时长;午休时间为 12:00 至 14:00,此时间段内不算工作时长;晚饭时间为 18:00 至 19:30,此时间段内也不算工作时长。
输入包括四行:第一行是员工当天进门禁的次数 ( n );第二行是员工当天所有的入门禁时间,以空格分隔(格式为 HH:MM);第三行是员工当天出门禁的次数 ( m );第四行是员工当天所有的出门禁时间,以空格分隔(格式为 HH:MM)。输出为员工当天的工作时长(单位:分钟)。
思路: 模拟
若离岗时间不超过15min,那么直接可以将出门禁时间改为下次入门禁时间。对于午休时间和晚饭时间,可以将入门禁时间改为午休和晚饭的结束,出门禁时间改为午休和晚饭的开始。处理后可能会存在单次打卡出门禁时间在入门禁时间之前,直接将本次工作时间置零即可。然后计算单次工作时间。
题解
我们需要计算员工的工作时长,具体考虑以下几点:
-
输入与数据结构:
- 我们首先读取员工当天的入门禁和出门禁时间。为了方便计算,使用一个
pair<int, int>
的结构来存储时间(小时和分钟)。
- 我们首先读取员工当天的入门禁和出门禁时间。为了方便计算,使用一个
-
离岗时间的处理:
- 如果员工的离岗时间不超过 15 分钟,可以认为该段时间内不算离岗,因此可以将该次出门禁时间替换为下次入门禁时间。
-
午休和晚饭时间的处理:
- 午休时间为 12:00 到 14:00,晚饭时间为 18:00 到 19:30。在计算工作时长时,如果入门禁时间落在午休时间或晚饭时间内,需要调整入门禁和出门禁的时间:
- 入门禁时间调整为午休结束或晚饭结束的时间。
- 出门禁时间调整为午休开始或晚饭开始的时间。
- 午休时间为 12:00 到 14:00,晚饭时间为 18:00 到 19:30。在计算工作时长时,如果入门禁时间落在午休时间或晚饭时间内,需要调整入门禁和出门禁的时间:
-
计算有效工作时长:
- 对于每一对入门禁和出门禁时间,计算其对应的工作时长,并累加。如果出门禁时间在入门禁时间之前,则该段工作时间为 0。
代码
C++
java
python
-
- 1
Information
- ID
- 48
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 357
- Accepted
- 83
- Uploaded By