#M0002. 版本号

    ID: 998 传统题 文件IO:version 1000ms 512MiB 尝试: 26 已通过: 14 难度: 普及− 上传者: 标签>CSP-J复赛T1排序字符串2026模拟

版本号

题目描述

本题使用文件输入输出:输入文件名为 version.in,输出文件名为 version.out。

小 Z 维护着一个软件的 nn 个历史版本。每个版本都有一个版本号,形如 1.10.2:由若干段非负整数组成,相邻两段之间用一个 . 隔开。

两个版本号按下面的规则比较大小:

  • 从左到右逐段比较,每一段都按整数的数值比较(例如 1.10 比 1.9 新,因为第二段 10>910 > 9);
  • 若某一段已经分出大小,后面的段不再比较;
  • 若一方的段先用完了,就把它缺少的段都视为 00(例如 2.0 比 1.9.9 新;1.2 和 1.2.0 视为同一个版本)。

现在请你把这 nn 个版本号从旧到新排序后输出。

输入格式

输入文件名为 version.in。

第一行一个整数 nn,表示版本个数。

接下来 nn 行,每行一个字符串,表示一个版本号。保证任意两个版本号按上述规则比较都不相同。

输出格式

输出文件名为 version.out。

共 nn 行,每行一个版本号,表示按从旧到新排好序的结果。版本号要原样输出(不要增删段,也不要改变数字的写法)。

样例 #1

样例输入 #1

5
1.10
1.9
2.0
1.9.3
1.2.11

样例输出 #1

1.2.11
1.9
1.9.3
1.10
2.0

样例解释

1.9 与 1.9.3 比较:前两段相同,1.9 缺第三段视为 00,0<30 < 3,所以 1.9 更旧。

1.9.3 与 1.10 比较:第二段 9<109 < 10,所以 1.9.3 更旧。注意如果按字符串比较,"1.9.3" 会排在 "1.10" 后面,那是错的。

样例 #2

样例输入 #2

4
3
2.5.0.1
2.5.0.0.7
10.0

样例输出 #2

2.5.0.0.7
2.5.0.1
3
10.0

样例解释

2.5.0.0.7 与 2.5.0.1 比较:第四段 0<10 < 1,前者更旧。3 与 10.0 比较:第一段 3<103 < 10。

提示

数据范围

  • 对于 30%30\% 的数据:每个版本号恰好 33 段,且每一段都是一位数;
  • 对于 60%60\% 的数据:所有版本号的段数都相同;
  • 对于 100%100\% 的数据:1≤n≤10001 \le n \le 1000,每个版本号有 1∼101 \sim 10 段,每段是一个 0∼109−10 \sim 10^9-1 的整数,不含多余的前导 00(00 本身写作 0),任意两个版本号互不相同。