爱丽丝在人偶制作的过程中,为了方便维护众多的“上海人偶”,为每个人偶标记了不同的版本号。随着人偶版本的更迭,版本号的排布变得十分混乱,她需要你帮忙将这些版本号按从小到大进行整理。 每个版本号字符串由主版本号和可选的测试版本号组成: 1. 主版本号:由 1 至 4 个非负整数组成,整数之间用 `.` 分隔(例如 `1.0.2`)。 2. 测试版本号:若存在,则位于主版本号之后,以空格分隔,格式为 `betaX`,其中 X 为正整数(例如 `1.0.2 beta3`)。若不包含此部分,则该版本为正式版。 排序规则如下: 1. 比较主版本号:从左至右依次比较对应位置的整数。若在某个位置数字不同,则数字较小者对应的版本号较小;若一个主版本号是另一个的前缀且两者长度不同,则较短者较小(例如 `1.0` 当主版本号完全相同时: - 测试版总是小于正式版(例如 `1.0.0 beta9` < `1.0.0`)。 - 若两者均为测试版,则比较 `beta` 后续的整数 X ,数字较小者对应的版本号较小。
第一行包含一个整数 n ( 1 ≤ n ≤ 100 ),表示版本号的数量。 接下来的 n 行,每行包含一个符合上述格式的版本号字符串。 主版本号的每个部分均为 [0, 1000] 范围内的整数,且不含多余的前导零(除了数字 `0` 本身)。若存在 `beta` 字段,其后的数字 X 亦在 [1, 1000] 范围内。
输出共 n 行,每行一个字符串,表示按升序排列后的版本号序列。
5 1.0.1.0 1.0.0.0 beta3 1.0.0.1 beta1 1.0.0.0 beta2 1.0.0.1
1.0.0.0 beta2 1.0.0.0 beta3 1.0.0.1 beta1 1.0.0.1 1.0.1.0
考点:排序
数据规模 n ≤ 100 | 限制 1 秒 / 256MB | 标准输入输出
参考方向:排序
先用 O(n log n) 排序把无序变有序,后续处理往往就简单了。
思路框架(排序 通法 · 非本题专属)
实现要点:在 C++ 中用 std::sort,Python 用 sorted();注意自定义比较函数的严格弱序。
复杂度:时间 O(n log n) | 空间 O(log n) ~ O(n)
该范式的通法易错点
对照本题
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。
样例 1:输入 5 / 1.0.1.0 / 1.0.0.0 beta3 / 1.0.0.1 beta1 / 1.0.0.0 beta2 / 1.0.0.1 → 输出 1.0.0.0 beta2 / 1.0.0.0 beta3 / 1.0.0.1 beta1 / 1.0.0.1 / 1.0.1.0
样例排序说明:
1.0.0.0 的部分位数字小于 1.0.0.1 和 1.0.1.0,故排在最前。1.0.0.0 的两个版本,比较测试版编号:由于 2 < 3 ,故 beta2 排在 beta3 之前。1.0.0.1 的两个版本,由于测试版 beta1 必须小于正式版,故 1.0.0.1 beta1 排在 1.0.0.1 之前。解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-04月23号留学生开发岗。