luogu#P7267. [BalticOI 2000] Time Zones (Day1)
[BalticOI 2000] Time Zones (Day1)
题目描述
你是一名拥有全球客户的商人。在某一天的 个小时里,你恰好收到了来自全球所有 个时区的消息(包括你所在的第 时区),每个时区各发来了一条消息。每条消息都附带了发送者的本地发送时间(假设消息是瞬间送达的)。
不幸的是,由于千年虫漏洞,消息中只显示了本地的“小时”和“分钟”,并没有包含任何能识别发送者所在时区的信息。
你的任务是:根据这些消息,推断出每条消息分别来自哪一个时区。
时区与时间转换规则
- 基本设定: 这个世界的一天一共有 个小时(编号为 )。全球也正好划分为 个时区(编号为 )。
- 你的基准位置: 你生活并在第 时区接收消息(类似于“格林威治标准时间 GMT”),第 时区没有时间偏移。
- 特殊的时区转换: 本题的时区是向西计算的。这意味着,如果一条消息来自第 时区,其本地时间的小时数为 ,那么当它到达你的第 时区时,你的时间(小时数)为:
📌 注意: 这与我们日常的时区计算习惯相反。例如,如果第 时区的本地时间是
03:15,那么它到达你的第 时区时,时间就是05:15。 - 边界与时间单调性:
- 消息可以在一天的任何时间到达,即第 时区的时间范围在
0:00到(n-1):59之间。 - 日界线位于第 时区和最后一个时区之间,因此可以忽略(这意味着换算后的第 时区小时数 必须严格控制在 之间,不能越界,也不存在跨天循环)。
- 没有两条消息是在同一时间到达的(换算成第 时区的时间后,各不相同)。
- 消息可以在一天的任何时间到达,即第 时区的时间范围在
输入格式
第一行包含一个整数 (),代表一天的总小时数、总时区数以及你收到的消息数量。
接下来的 行,每行包含一个 位数字的字符串 hhmm(前两位为小时 ,后两位为分钟 ),代表一条消息的本地发送时间。其中 ,。
⚠️ 最核心条件:输入的这 行数据是严格按照时间先后顺序(Chronological Order)排列的。 也就是说,最早到达第 时区的消息在第一行,最晚到达的在最后一行。换算成第 时区的时间后,必须满足严格单调递增。
输出格式
输出一行 个由空格隔开的整数(范围 ),代表输入中每条消息对应的时区编号。第一个数字对应输入的第一条消息,以此类推。
5
0017
0250
0400
0201
0002
3 1 0 2 4
提示
提示说明
样例解释
对于样例 ,共包含 条消息,一天的合法小时范围为 。按照输出给出的时区序列 进行换算,各消息到达第 时区的时间如下:
- 第 条消息: 本地时间 ,来自第 时区。换算后为 点,即 。
- 第 条消息: 本地时间 ,来自第 时区。换算后为 点,即 。
- 第 条消息: 本地时间 ,来自第 时区。换算后为 点,即 。
- 第 条消息: 本地时间 ,来自第 时区。换算后为 点,即 。
- 第 条消息: 本地时间 ,来自第 时区。换算后为 点,即 。
检查结果:
- 换算后的第 时区时间序列为:,严格满足单调递增的收到顺序。
- 分配的时区编号 恰好不重不漏地使用了 的所有时区。
- 类似第 条消息 ,它必须来自第 时区。若来自其他大于 的时区(如第 时区),换算后的小时数将达到 ,超出 的合法范围。
数据规模与约定
- 对于 的数据,满足 。
- 对于每条消息的本地时间,满足 ,。
- 官方所有测试数据均保证有且仅有唯一解。
题目说明
-
由 Gemini-3.1-pro-thinking 翻译。