れとろのメモ置場

とあるSEのメモ置場

AtCoder Beginner Contest 296

AtCoder Beginner Contest 296に参加しました。

結果

A,B,Cの3問正解でした。

D問題は考察してると数学でどうこうする系の問題な気はしたけど解ききれなかった。

A - Alternately

FとMで構成された文字列が与えられるので、文字列中にFFかMMを含んでいるかどうかを答える問題。

文字列の検索として標準ライブラリの機能を使えば解けそう。
あとは、i文字目とi+1文字目が同じ文字かどうかでも判断できる。

文字列の中の各文字への参照方法を知っているかどうかな問題だと思う。

B - Chessboard

長さ8文字の文字列が8個入力されるから、全文字列中唯一ある"*"が何番目の文字列の何文字目なのかを答える問題。

何文字目の部分はa,b,c,d,e,f,g,hのどれかで答えないと行けないのがちょっと面倒。
C++なら'a'に0~7を足せばa~hになるのでそれで対応した。

二重ループで文字列を全探索できるかどうか+数値と文字の対応変換ができれば解けそうな問題。

C - Gap Existence

与えられた数列のうち任意の2つの値の差がXにできるかどうかを答える問題。

数列の要素数的にO(N ^ {2})だとTLEになりそうなので(O(N))くらいで解きたい。

愚直に解くなら二重ループで全探索すればいいけど、O(N ^ {2})になるのでダメそう。 A _ {i} - A _ {j} = XなのでA _ {i}を決めればA _ {j}として欲しい値は一意に決まる。なのでA _ {i}は全探索しつつ、欲しいA _ {j}が数列内に存在するかどうかを確認して答えた。