コンテスト時間: 2024-06-08(土) 21:00 ~ 2024-06-08(土) 22:40 (100分)
A - Sanitize Hands
Difficulty: ???
解答時間: 2:32
本の手をちょうど消毒できる消毒液がある。
人が順番に手の消毒をするが、
人目は
本の手を持っており自身のすべての手を1回ずつ消毒する。何人目の宇宙人までがすべての手を消毒できるか求めよ。
から
を順次引いていき、
である回数を数えればよい。
B - Uppercase and Lowercase
Difficulty: ???
解答時間: 2:14
- 長さが奇数で英小文字と英大文字からなる文字列
が与えられる。
に含まれる大文字の個数が小文字の個数よりも多ければ、
に含まれる全ての小文字を大文字に変換せよ。そうでない場合、
に含まれる全ての大文字を小文字に変換せよ。
- C++ では大文字か小文字かの判定に
isupper()
、islower()
が、大文字や小文字への変換にtoupper()
、tolower()
が用意されているので、これを使って問題文の通りに実装していけばよい。
C - Sierpinski carpet
Difficulty: ???
解答時間: 10:59
- 非負整数
に対して、以下のように「レベル
のカーペット」を定義する。
- 定義 :
のとき、カーペットは黒いマス1個からなる
のグリッドである。
のとき、カーペットは
のグリッドである。このグリッドを
の9個のブロックに分割したとき、
- 中央のブロックは全て白いマスである。
- 他の8個のブロックは、レベル
のブロックである。
- 黒いカーペットを
#
、白いカーペットを.
として、非負整数に対してレベル
のカーペットを出力せよ。
D - 88888888
Difficulty: ???
- 正整数
に対し、
を
個つなげた整数を
とする。
を
で割った余りを求めよ。
は最大
なので、普通に計算するのは不可能。そこで、
を式を用いて表してみると、
を
の桁数として、
と書ける。これを すればよいが、除算の
は逆元を取らなければならないことや、
の累乗には繰り返し二乗法を用いる必要があることに注意。
- AC Library の
modint
を使うことでこの辺りの処理を簡潔に書ける。
の累乗を計算する過程でオーバーフローしていることに気付かず終了。何やってんだ()