#WeekContest1001T3. 打卡记录统计

打卡记录统计

打卡记录统计

题目描述

校园吉祥物 噜噜 给教室装了一套打卡系统,用来记录学生进出教室的情况。每当学生刷卡离开或返回时,闸机会自动生成一条记录,包含以下信息:

  • 学号11001 \sim 100 的正整数
  • 记录类型
  • S —— 开始离开教室(Start
  • E —— 返回教室(End
  • 时间戳hh:mm2424 小时制)

特殊标记\color{red}\text{特殊标记}

  • 当记录中的 学号为 00 时,表示 当天所有记录结束,紧接着的记录属于下一天。

  • 当出现 单独一行 -1 时,表示 所有天的记录结束,输入到此为止。

【说明,以下记录需要忽略】:\color{purple}\text{【说明,以下记录需要忽略】:}

  1. 若某位学生当天存在 E 但没有对应 S(或反之),则该生当条记录视为无效,不计入统计。
  2. 若某位学生在E之前有多条S,只取最早的那一条S,其余的忽略;
  3. 若某位学生在E之后还有多条E,同样只取最早的那条E,其余的忽略;

同一个学生一天可能出现出去多次的情况;

现在噜噜要求你对于每天的打卡记录,统计并输出每天所有学生外出的总次数和平均每次离开的时长(分钟,四舍五入取整)

输入格式

若干天的数据按顺序给出,直到文件结束。 一行一条记录,格式如下:

id type hh:mm
  • id:学生学号,11001 \sim 100
  • type:字符 SE
  • hh:mm:离开/返回时间。

说明:

  • 记录中的 学号为 00 时,表示 当天所有记录结束,紧接着的记录属于下一天
  • 当读到一行仅含 -1 时,表示全部记录结束。

同一天内记录按时间先后给出(时间戳非递减)。

输出格式

若干行,每一行为每一天,输出每天所有学生外出的总次数和平均每次离开的时长(分钟,四舍五入取整)

1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00
-1
2 196
0 0
1 60

样例解释:

第 1 天

1 S 08:10   // 学号 1 离开
2 S 08:35   // 学号 2 离开
1 E 10:00   // 学号 1 返回
2 E 13:16   // 学号 2 返回
0 S 17:00   // 0 ⇒ 第一天结束
学号 配对次数 时长(分钟) 说明
1 1 110 08:10 → 10:00
2 281 08:35 → 13:16

当天所有学生平均离开时长: 110+2812=195.5196 \frac{110 + 281}{2} = 195.5 \rightarrow 196

输出行:2 196

2 为当天有效打卡的次数196 为平均离开时长。


第 2 天

0 S 17:00   // 0 ⇒ 第二天结束

没有任何合法学号(1~100)的完整 S-E 配对, 因此 有效次数 = 0,平均时长记为 0

输出行:0 0


第 3 天

3 E 08:10   // 学号 3 先出现 E(没有配对 S),该条无效
1 S 08:20   // 学号 1 离开
2 S 09:00   // 学号 2 离开
1 E 09:20   // 学号 1 返回(成功配对)
0 E 17:00   // 0 ⇒ 第三天结束      
-1          // 全部结束
学号 配对次数 时长(分钟)
1 60
2 0
3

有效打卡次数:仅学号 11 平均离开时长601=60\dfrac{60}{1} = 60

输出行:1 60


数据范围

  • 总记录条数 ≤ 4000040000
  • 1 ≤ id ≤ 100
  • 时间戳 00:00 ~ 23:59