Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MAXSIZE = 60
- dp = [[0] * MAXSIZE for _ in range(11)]
- dp[0] = [1] * MAXSIZE
- for i in range(1, 11):
- for j in range(MAXSIZE):
- dp[i][j] = sum(dp[i - 1][j:])
- for i in range(1, 11):
- for j in range(MAXSIZE):
- dp[i][j] += dp[i - 1][j]
- dp[0] = [0] * MAXSIZE
- for x in dp:
- x += [1]
- # print(*dp, sep="\n")
- def get_number(N):
- ANSWER_LENGTH = 1
- while dp[9][-ANSWER_LENGTH - 1] < N:
- ANSWER_LENGTH += 1
- prev_digit = 0
- for i in range(-ANSWER_LENGTH, 0):
- for new_prev_digit in range(9, prev_digit - 1, -1):
- value = N - sum(dp[9 - x][i] for x in range(new_prev_digit)) + sum(dp[9 - x][i] for x in range(prev_digit))
- if value > 0:
- print(new_prev_digit, end="")
- prev_digit = new_prev_digit
- N = value
- break
- print()
- # for n, ANSWER_LENGTH in [(3, 1), (14, 2), (215, 3)]: # 3, 14, 789
- # get_number(n)
- n = int(input())
- if n < 10:
- print(n)
- else:
- get_number(n + 1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement