A. Box is Pull
ネズミの開始位置が任意なことに注意
B. Belted Rooms
ちゃんと紙に書きましょう問題
'>'が0、または'<'が0ならN個全部可能。
そうでないなら、連続する'-'の個数。
場合分けと円環上で連続するアイテムを数えられるか問題。
C. ABBB
ABを優先して消す。
解法。
答えをNで初期化する。Bの数を管理するカウンタを用意する。
逆向きにみていってBを見つけたらカウンタをインクリメント。
Aを見つけたら、答えを-2(ABが消える)して、Bのカウンタをデクリメント。
最後(先頭)までみたら、カウンタが偶数なら答えからカウンタ分を引く、奇数なら(カウンタ-1)を引く(BBを消す)。
D. Bouncing Boomerangs
条件をちゃんと詰めよう問題。
(x,y)を(row,column)とする。
まず任意のインデックスが0でないとき、(index,index)に優先してターゲットを置くことにすれば、グリッドをはみ出さず、横方向に重複しない(縦横にターゲットを3つ以上置くことは出来ない)。
条件を詰めると以下となる(fig.1,fig.2参照)
- 「1」なら(index,index)に常に置くことができる
- 「2」なら使っていない「1」のインデックスに置かれたターゲットをペアにできる。
- 「3」なら使っていない「1」と「2」と「3」のインデックスに置かれたターゲットをペアにできる。
- 「2」「3」でペアとなるターゲットがない場合不適。
解法
- 右から決めていく。
- ターゲットの座標を決定した「1」のインデックスを、「2」と「3」のインデックスをとする。
- 「0」のとき。なにもしない。
- 「1」のときターゲットを(index,index) としてにindexを追加。
- 「2」のとき、 として、(index,c)。にindexを追加。Aからを削除。
- 「3」のとき、 、として、(index,index)、(d,index)。にindexを追加。AまたはBから選択したペアを削除。
- 「2」「3」のとき、かつなら、不適。
E. Carrots for Rabbits
無限にバグった。
先にだめな方針。「大きい値を2で割っていく」
この方針でサンプルが合っちゃうのが罠だった。方針がまずいことに気づかずWAを連発。
正しい方針。「ある人参をいくつに(等分に)分割するかを管理して、分割したとき減少量が大きいものから実施していく」。
だめな方針は分割数がたまたま一致すると答えがあってしまう。例えば、() と() 。
実装はpriorityqueueを使って、減少量を大きいものから優先してシミュレーションで間に合う。
「等分に分割」としているが、実際は整数しか認められないので余りをとって調整する。