P13849 [CERC 2023] Equal Schedules

题目描述

你是某个高可用服务的值班人员之一,该服务为用户提供编程题目求解。作为一个组织良好的团队,你们有一份值班表,明确规定了谁在什么时间负责该服务。现在一位同事给你发送了一份新的值班表,你想确认每个人的值班时长是否与之前相同,或者输出任何差异。 值班表由若干行组成,每行格式为 $s_i \ e_i \ t_i$,其中 $s_i$ 和 $e_i$ 表示队员 $t_i$ 的值班起止时间(从某个起始小时算起,左闭右开区间)。 例如,给定一份样例排班表: ``` 0 7 jan 7 14 tomaz 14 20 jure 20 24 jan 24 25 tomaz 25 26 jure ``` 我们可以看到,jan 在最初的 $7$ 小时(小时 $0, 1, 2, 3, 4, 5, 6$)值班,接下来 tomaz 值班 $7$ 小时,……最终统计:jan 总共值班 $11$ 小时,tomaz 值班 $8$ 小时,jure 值班 $7$ 小时。

输入格式

输入包含两份排班表,中间由一行水平分隔线 `------` 分隔。 每份排班表包含一行或多行,格式为 $s_i \ e_i \ t_i$,其中整数 $s_i, e_i$ 表示队员 $t_i$ 在从 $s_i$ 小时开始直到 $e_i$ 小时(不包含 $e_i$)之间值班。 在第二份排班表之后,有一行 `======` 作为输入结束。

输出格式

输出两份排班表的差异,格式为 $t_i \ \pm d_i$,其中 $d_i$ 表示队员 $t_i$ 在第二份排班表和第一份排班表之间的时长差异。 输出按照队员名字的字母顺序排列;若某位队员的时长没有变化,则不输出该队员。差异必须带有正负号。 如果没有任何差异,则输出一行:`No differences found.`。

说明/提示

### 输入限制 对于每份排班表,满足以下条件: - $s_1 = 0$ - $s_i < e_i$ - $s_{i+1} = e_i$ - $e_i \leq 1000$ - 名字 $t_i$ 仅包含英文小写字母 - $3 \leq |t_i| \leq 20$ --- 翻译由 ChatGPT-5 完成