#3570. 星图压缩 (throw)

星图压缩 (throw)

需要文件读写

大样例:在题库 3573模拟测大样例 文件

题目描述

星图终端会把一条很长的坐标编号按十进制写下。为了制作多级缩略图,终端需要从低位到高位逐层压缩这个编号。

给定一个有 ( k ) 位的非负整数 ( n ),将它从高位到低位依次编号为第 1 位到第 ( k ) 位。压缩过程从第 ( k ) 位开始,向前逐位进行。处理第 ( i ) 位时:

  1. 若当前第 ( i ) 位数字小于等于 4,则把第 ( i ) 位以及它右侧所有位全部变为 0。

  2. 若当前第 ( i ) 位数字大于等于 5,也把第 ( i ) 位以及它右侧所有位全部变为 0,但要向第 ( i - 1 ) 位进 1。

  3. 如果进位使某一位变成 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.inthrow/throw2.ans

该样例与测试数据 2 ~ 5 满足同样的约束条件。

数据范围

测试点 ( k ) 特殊性质
1 无特殊限制 ( T = 1 )
2 ~ 5 ( k \le 18 )
6 ~ 10 无特殊限制

对于 100%100\% 的数据,1T101 \le T \le 101k1001 \le k \le 100