AtCoder Beginner Contest 171 C - One Quadrillion and One Dalmatians【Python】
https://atcoder.jp/contests/abc171/tasks/abc171_c
AtCoder ProblemsのRecommendationで Difficulty: 560、Solve Probability:40%でした。
最初にNが何文字の名前かを求め26進数で考えることで解くことができましたが、実装が難しくかなりの時間がかかってしまいました。
N = int(input()) # 名前の文字数がxのときの最後の番号 end = [26, 702, 18278, ...] end = [] n = 0 while n <= 1000000000000001: n = 26 * (n + 1) end.append(n) # 番号Nの名前の文字数を求める n_char = 1 for e in end: if N <= e: break n_char += 1 # 26進数で処理するため例えば27を0にする if n_char != 1: adj_N = N - end[n_char-2] - 1 else: adj_N = N - 1 # アルファベットのリスト import string alph = string.ascii_lowercase # aを0、zを25として26進数で処理する s = '' while adj_N != 0: rem = adj_N % 26 adj_N //= 26 # 26で割った余りをアルファベットに変換 s = alph[rem] + s # 文字数が足りなければaで埋める(Nの文字数が3で文字列が'z'となっている場合は'aaz'とする) s = s.rjust(n_char, 'a') print(s)