問題概要
問題ページ
-
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()