問題概要
問題ページ
-
-
D - Lunlun Number
問題ページへ移動する
問題文
正の整数 X が以下の条件を満たすとき、 X はルンルン数であると言います。
- X を(leading zeroなしで)十進数表記した際に、隣り合うどの 2 つの桁の値についても、差の絶対値が 1 以下
例えば、 1234 , 1 , 334 などはルンルン数ですが、 31415 , 119 , 13579 などはルンルン数ではありません。
正の整数 K が与えられます。小さい方から K 番目のルンルン数を求めてください。
制約
- 1 \leq K \leq 10^5
- 入力はすべて整数である。
問題の考察
ACコード
import sys
def solve():
readline = sys.stdin.buffer.readline
mod = 10 ** 9 + 7
k = int(readline())
if k < 10:
print(k)
else:
ls_r = [str(i) for i in range(1, 10)]
ls_z = ["0"]
t = 9
while True:
t_ls_r = []
t_ls_z = []
for v in ls_r + ls_z:
top = int(v[0])
for i in range(max(0, top - 1), min(10, top + 2)):
if i == 0:
t_ls_z.append("".join([str(i)] + list(str(v))))
else:
t_ls_r.append("".join([str(i)] + list(str(v))))
if len(t_ls_r) + t >= k:
t_ls_r.sort()
print(t_ls_r[k - t - 1])
exit()
else:
ls_r = t_ls_r
ls_z = t_ls_z
t += len(t_ls_r)
if __name__ == '__main__':
solve()