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