【华为OD机试真题 python】报文解压缩

题目描述

  • 为了提升数据传输的效率,会对传输的报文进行压缩处理。
  • 输入一个压缩后的报文,请返回它解压后的原始报文。
  • 压缩规则:n[str],表示方括号内部的 str 正好重复 n 次。
  • 注意 n 为正整数(0 < n <= 100),str只包含小写英文字母,不考虑异常情况。

输入描述:

输入压缩后的报文:

1)不考虑无效的输入,报文没有额外的空格,方括号总是符合格式要求的;

2)原始报文不包含数字,所有的数字只表示重复的次数 n ,例如不会出现像 5b 或 3[8] 的输入;

输出描述:

解压后的原始报文

注:

1)原始报文长度不会超过1000,不考虑异常的情况

示例 1   输入输出示例仅供调试,后台判题数据一般不包含示例

输入

3[k]2[mn]

输出

kkkmnmn

说明

k 重复3次,mn 重复2次,最终得到 kkkmnmn

示例2  输入输出示例仅供调试,后台判题数据一般不包含示例

输入

3[m2[c]]

输出

mccmccmcc

说明

m2[c] 解压缩后为 mcc,重复三次为 mccmccmcc

华为 OD(校招或社招)中,"报文响应时间"是一个常见的题目背景,通常涉及 IGMP 协议中的最大响应时间(Max Response Time)字段。尽管 2025 年的具体考题尚未公开,但基于历年真题的趋势和考察重点,可以推测该类题目的核心逻辑、输入输出要求以及可能的解题思路。 ### 核心逻辑与规格指标 根据历年真题描述,此类问题的核心在于模拟 HOST 接收到多个查询报文后,如何计算其最终发送响应报文的时间。HOST 在接收到每个查询报文时,会根据当前报文的接收时间和最大响应时间字段值(M),计算出一个预期响应时间(即 T + M)。如果后续收到新的查询报文,并且其预期响应时间更早,则更新响应时间为该更早时间。 最终响应时间为所有预期响应时间中的最小值。 #### 输入描述(示例) - 第一行输入一个整数 C,表示收到的查询报文数量。 - 接下来 C 行,每行包含两个整数 T 和 M,分别表示第 i 个查询报文的到达时间(单位:秒)和最大响应时间(单位:秒)。 #### 输出描述 - 输出一个整数,表示 HOST 最终发送响应报文的时间(单位:秒)。 ### 示例代码(Python) ```python # 读取输入 c = int(input()) queries = [] for _ in range(c): t, m = map(int, input().split()) queries.append((t, m)) # 计算最早的响应时间 earliest_response_time = float('inf') for t, m in queries: response_time = t + m if response_time < earliest_response_time: earliest_response_time = response_time # 输出结果 print(earliest_response_time) ``` ### 时间复杂度分析 - 时间复杂度为 O(C),其中 C 为查询报文的数量,因为只需要遍历一所有报文并计算最小响应时间。 - 空间复杂度为 O(1),仅使用了几个变量存储中间结果。 ### 可能变种与扩展 虽然基础版本较为简单,但在实际考中可能会引入以下变化: - 多个 HOST 的情况,需考虑广播制。 - 引入网络延迟或抖动,使响应时间不再线性。 - 使用位运算优化性能,尤其是在处理大规模数据时。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北方肆歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值