#3570. 星图压缩 (throw)
星图压缩 (throw)
需要文件读写
大样例:在题库 3573模拟测大样例 文件
题目描述
星图终端会把一条很长的坐标编号按十进制写下。为了制作多级缩略图,终端需要从低位到高位逐层压缩这个编号。
给定一个有 ( k ) 位的非负整数 ( n ),将它从高位到低位依次编号为第 1 位到第 ( k ) 位。压缩过程从第 ( k ) 位开始,向前逐位进行。处理第 ( i ) 位时:
-
若当前第 ( i ) 位数字小于等于 4,则把第 ( i ) 位以及它右侧所有位全部变为 0。
-
若当前第 ( i ) 位数字大于等于 5,也把第 ( i ) 位以及它右侧所有位全部变为 0,但要向第 ( i - 1 ) 位进 1。
-
如果进位使某一位变成 10,则按照十进制规则继续向更高位进位。即使最高位发生进位,原来的第 1 到第 ( k ) 位编号仍按最初的 ( k ) 位计算。
你需要输出从原数开始,依次处理第 ( k ) 位、第 ( k - 1 ) 位、...、第 2 位后的所有结果,共 ( k ) 个数。相邻两个结果之间用空格、短横线、右尖括号组成的字符串 -> 分隔。
输入格式
从 throw.in 中读入数据。
第一行一个整数 ( T ),表示数据组数。
对于每组数据:
- 第一行一个整数 ( k ),表示 ( n ) 的位数。
- 第二行一个 ( k ) 位整数 ( n )。
输出格式
输出到 throw.out 中。
对于每组数据,输出一行,表示该编号逐层压缩的全过程。
样例
样例输入 1
3
4
2023
3
197
2
00
样例输出 1
2023 -> 2020 -> 2000 -> 2000
197 -> 200 -> 200
00 -> 00
解释:
-
对于
2023:- 原数:2023
- 处理第 4 位(3 ≤ 4),右侧(第 4 位)变 0:2020
- 处理第 3 位(2 ≤ 4),第 3~4 位变 0:2000
- 处理第 2 位(0 ≤ 4),第 2~4 位变 0:2000
-
对于
197:- 原数:197
- 处理第 3 位(7 ≥ 5),第 3 位变 0,向第 2 位进 1:200
- 处理第 2 位(0 ≤ 4),第 2~3 位变 0:200
-
对于
00:- 原数:00
- 处理第 2 位(0 ≤ 4),第 2 位变 0:00
样例输入 2
见选手目录下的 throw/throw2.in 与 throw/throw2.ans。
该样例与测试数据 2 ~ 5 满足同样的约束条件。
数据范围
| 测试点 | ( k ) | 特殊性质 |
|---|---|---|
| 1 | 无特殊限制 | ( T = 1 ) |
| 2 ~ 5 | ( k \le 18 ) | 无 |
| 6 ~ 10 | 无特殊限制 |
对于 的数据,,。
相关
在下列比赛中: