SP3310 SERIALN - Serial Numbers

题目描述

某制造商使用一张由序列号范围及其对应的状态码、转移码组成的有序表格来管理序列号。这个表格共四列,按以下顺序储存信息:起始序列号、结束序列号、状态码、转移码。序列号和转移码是介于 1 和 $2^{31} - 1$(即 2147483647)之间的整数,而状态码是一个大写字母。表格按照序列号递增的顺序维护,不能出现序列号范围重叠,并且任何序列号都必须在表中准确体现其最新的状态码和转移码。 假设创建了 100,000 个状态为 "A" 且转移码为 1 的序列号,它们的记录可以表示为: ``` 1 100000 A 1 ``` 显然,这种方式比存储 100,000 行相同状态和转移码的数据更加高效。当需要在已定义的序列号范围中为部分序列号更新状态或转移码时,就会出现问题。例如,如果序列号 12345 需要更新为状态 B,原表需要调整为以下三条记录: ``` 1 12344 A 1 12345 12345 B 1 12346 100000 A 1 ``` 接下来,如果我们把序列号范围 12000 到 12999 的转移码改为 2,则会得到: ``` 1 11999 A 1 12000 12344 A 2 12345 12345 B 2 12346 12999 A 2 13000 100000 A 1 ``` 然后,将序列号范围 10000 到 100000 的所有状态更新为 C 且转移码更新为 2: ``` 1 9999 A 1 10000 100000 C 2 ``` 一旦创建,序列号将永远保留,但可能会存在未定义序列号的区间。比如,可以将 1000000 到 1999999 之间的序列号设置为状态 Z 和转移码 99: ``` 1 9999 A 1 10000 100000 C 2 1000000 1999999 Z 99 ``` 最后,表格始终维持在最少的行数,这意味着表中绝不会有两个可以合并为一行的相邻行。例如,以下表格: ``` 1 10 A 1 11 20 A 1 21 30 B 1 ``` 前两行可以合并,因此它不是最优表格形式。最少行数的表示如下: ``` 1 20 A 1 21 30 B 1 ``` 而下例由于非连续转移码,目前已是最小行数表示: ``` 1 10 A 1 11 20 A 2 21 30 B 1 ``` 同样,以下表格也无法再简化,因为前两行不连续: ``` 1 10 A 1 12 20 A 1 21 30 B 1 ```

输入格式

每个输入案例以一个字符串命名,并且该字符串最多包含 80 个字符。"END" 表示输入结束。接下来是 1 到 100 行形式如 "A B S T" 的数据,其中 A、B 和 T 是 1 到 $2^{31} - 1$ 范围内的整数,S 是一个大写字母,且 A ≤ B。这些是要依次应用的序列号变更记录,其中 A 是序列号起始,B 是结束,S 是状态码,T 是转移码。一个仅包含数字 0 的行表示记录的结束。

输出格式

对于每个输入案例,先输出测试案例的名称,随后是所有序列号变更后,以最少行数表示的序列号表格。 **本翻译由 AI 自动生成**