kdxf提前批20230715-第三题

定义一个“模板串”为一个由数字字符和′?”组成的字符串。我们可以通过将问号替换成数字字符来得到正整数。显然,一个模板串可能会和多个正整数匹配。例如: “1?2”可以和102或者132等正整数匹配。请注意,匹配的正整数不能包含前导零,例如”??1”可以匹配101,但不能匹配001。小红拿到了一个模板串,她想知道,和这个模板串匹配的正整数中,第k小的是多少?

输入描述

第一行输入一个正整数t,代表询问次数。接下来的2* t行,每两行为一次询问: 第一行输入一个字符串,仅由数字字符和?’组成。第二行输入一个正整数k,代表询问的是第k小。

1≤t ≤ 10^4 1≤k≤10 ^9

字符串长度不超过30。

输出描述

输出t行,每行输出一个答案。如果一共都没有k个匹配的正整数,则输出-1。否则输出第小的匹配的正整数。


示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
输入:
4
??1
1
22?
100000000
2??
3
000???
1

输出:
101
-1
202
-1


分析:

难度:容易

  • 思维

这种方法的时间复杂度为 $O(k \log n)$,其中 $k$ 为模板串中问号的个数,$n$ 为最大的匹配数字。

具体地,我们可以将第 $k$ 个数字转化为字符串,然后将该字符串中的每个数字依次替换原字符串中的问号。如果第一个数字为 $0$,则需要将其替换为 $1$。需要注意的是,如果字符串中问号的个数少于数字的位数,则无法匹配该数字,此时需要特判并输出 $-1$。


代码

  • C++

1

  • java
1

  • Python
1
 
  • Golang
1

0%