第一行输入一个整数
,表示测试用例数量。
此后
行,每行输入一个不含前导零的数字字符串
,满足
。
保证所有测试用例的
之和不超过
。
对于每个测试用例,在一行上输出通过任意次数操作后能够得到的字典序最大的字符串。
6 19 1709 11555 51476 9876543210 5891917899
81 6710 33311 55431 9876543210 7875567711
以
为例:
![]()
![]()
![]()
;
![]()
![]()
![]()
,得到答案
。
再以
为例,可按如下序列操作:
![]()
![]()
![]()
;
![]()
![]()
![]()
;
![]()
![]()
![]()
,最终得到答案
。
package main
import (
"fmt"
)
func Min(a, b int) int{
if a < b{
return a
}
return b
}
func main() {
var t, length, max_id int
var s string
fmt.Scanf("%d", &t)
for t > 0{
t--
fmt.Scanf("%s", &s)
b := []byte(s)
length = len(b)
for i:=0;i<length;i++{
if b[i] > '7'{ // '8'和'9'不需要操作
continue
}
max_id = i
for j:=i+1;j<=Min(length-1, i+8);j++{
if b[j]-byte(j-i) > b[max_id]-byte(max_id-i){ // 差值
max_id = j
}
}
if max_id > i{
for max_id >i {
b[max_id], b[max_id-1] = b[max_id-1],b[max_id]-1
max_id--
}
}
}
fmt.Println(string(b))
}
}