Kazun の競プロ記録

競技プログラミングに関する様々な話題を執筆します.

AtCoder Beginner Contest 257 A問題 A to Z String 2

問題

atcoder.jp

提出解答

atcoder.jp

問題の概要

 {\tt A} N 個,  {\tt B} N 個,  \dots {\tt Z} N 個この順に連結させて得られる文字列において, 先頭から  X 番目の文字は何か?

制約

  •  1 \leq N \leq 100
  •  1 \leq X \leq 26N

解法1

この文字列の長さは  26N であり,  N \leq 100 なので, 最大でも  2600 である. よって, 問題文の文字列を実際に生成してその文字列における先頭から  X 文字目を出力すれば良い. ただし, 多くのプログラミング言語では  (X-1) 番目を指定しなければならないことに注意せよ.

解法2

 N 個同じ文字が続いているので, 以下のようにしても導くことができる.

  •  \left \lfloor \dfrac{X-1}{N} \right \rfloor=0 ならば  {\tt A} である.
  •  \left \lfloor \dfrac{X-1}{N} \right \rfloor=1 ならば  {\tt B} である.
  •  \vdots
  •  \left \lfloor \dfrac{X-1}{N} \right \rfloor=25 ならば  {\tt Z} である.

この解法の場合,  N が十分大きくなっても対応できる.

補足

 k 番目の英小文字は例えば次のようにして出力できる.

  • (C++)  {\tt 'A'+k}
  • (Python3) string パッケージから文字列 ascii_uppercase をインポートし, この文字列の 第  (k-1) 要素を出力する.