AtCoder Beginner Contest 043
成績
- 700点、77分29秒=125位
B問題で思わぬ落とし穴にハマって2回ペナルティ食らったのがよくなかったが、D問題の部分点解法まで解けたのでわりと満足。翌日は朝早くから予定があったので解答時間途中で終了。
解法メモ
A問題
与えられたに対して、必要なキャンディーの個数は
である。
B問題
入力文字列に対して、エディタ上の文字列
*1を用意する。
だから、
とわかる。ヌル文字を含めて11文字確保されていれば十分。
の文字を先頭から順に見ていき、
- 次の文字が0のときは、
の末尾に0をつける。
- 次の文字が1のときは、
の末尾に1をつける。
- 次の文字がBのときは、
が空なら何もしない。
が空でない時は、末尾から1文字消す。
最初にをヌル文字で埋めておき、
の現在の文字位置を示す変数
を用意すればよい。
の先頭がヌル文字ならば
は空だから何もしない。そうでない時は
の
文字目をヌル文字に置き換えて、
をデクリメントする。
C問題
個の整数すべてを最小コストで書き換えられる整数を
とおく。コストの総和は
だから、とわかる。
実際には、は整数とは限らないので、一旦
をdouble型で計算し、nearbyint関数などで最近接整数
をとるとよい。
そのときのコストはをバカ正直に展開するよりは最初から
を計算するほうが早い。
個の整数の範囲が
だから全探索でもすぐに終わるが、こういう問題を数学的に解けるようになっておいたほうがあとで生きてくることがあると思う。