問題概要
問題ページ
-
-
C - One Quadrillion and One Dalmatians
問題ページへ移動する
問題文
ロジャーは、彼のもとに突如現れた \(1000000000000001\) 匹の犬をすべて飼うことを決意しました。犬たちにはもともと \(1\) から \(1000000000000001\) までの番号がふられていましたが、ロジャーは彼らに以下のルールで名前を授けました。
- \(1,2,\cdots,26\) 番の番号がついた犬はその順に
a,b,...,zと命名されます。 - \(27,28,29,\cdots,701,702 \) 番の番号がついた犬はその順に
aa,ab,ac,...,zy,zzと命名されます。 - \(703,704,705,\cdots,18277,18278 \) 番の番号がついた犬はその順に
aaa,aab,aac,...,zzy,zzzと命名されます。 - \(18279,18280,18281,\cdots,475253,475254 \) 番の番号がついた犬はその順に
aaaa,aaab,aaac,...,zzzy,zzzzと命名されます。 - \(475255,475256,\cdots \) 番の番号がついた犬はその順に
aaaaa,aaaab,... と命名されます。 - (以下省略)
つまり、ロジャーが授けた名前を番号順に並べると:
a,b,...,z,aa,ab,...,az,ba,bb,...,bz,...,za,zb,...,zz,aaa,aab,...,aaz,aba,abb,...,abz,...,zzz,aaaa,... のようになります。
ロジャーはあなたに問題を出しました。
「番号 \(N\) の犬の名前を答えよ。」
制約
- \(N\) は整数
- \( 1 \leq N \leq 1000000000000001\)
問題の考察
ACコード
import sys
def solve():
input = sys.stdin.readline
mod = 10 ** 9 + 7
n = int(input().rstrip('\n'))
ans = []
while n != 0:
n -= 1
n, m = divmod(n, 26)
ans.append(chr(97 + m))
ans.reverse()
print("".join(ans))
if __name__ == '__main__':
solve()