ABC115

A - Christmas Eve Eve Eve

Dの範囲が狭い。if文で書けるようにした問題だが、これは" Eve"を付け足すだけでいい。けっこう速く書けたつもりだが、やはり文字列の処理は時間がかかるようで、1分を少しオーバーした。

後続の問題名を見る。ネーミングが適当すぎないかw

B - Christmas Eve Eve

これは簡単。いつものBより簡単だが、Bらしさはあまり感じない(強いて言えばCっぽい)。一番高いやつに半額を適用するだけ。実際に素早く書けた。

今気づいたが、問題の設定がちゃんと問題名と同じになってるんだねえ。

C - Christmas Eve

見るからに簡単そうだが、すぐには浮かばない。連続したK本とかの制約はないみたいなので、ソートする。あとはループ回して最小を求めるだけ。ループ回数がN-K+1で、+1がどこから来たかわからず不安になる。まあたまに見る形ではあったが、当時はなぜかわからなかった。さて、最大値と最小値を知る必要がある。んー?しゃくとりみたいにしてもダメか。まあセグ木ならできるけど、もう少し考えよう。ソートしてあるじゃん。これは酷い。なぜソートできたかも忘れている。帰着された問題を次のステップへ丸投げしてるからね(短期記憶なさすぎだろ)。サンプルが合ったので即提出(終了が10分遅くなったこともあってなんか焦ってる)。

D - Christmas

やっぱり今回もルンルンだね。問題文の言いたいことはすぐにわかる。Nが小さいので64bit整数でいける。だが解くのは骨だ。サンプル1を手で確認してから考察に入る。まず、レベルLバーガーの層数とパティの数を求める。2倍して3を足すとかでいける。Nが小さいのでまずそれを全部求める。B(L-1)P(L-1)Bみたいな形。んー、木を根から辿るように、自分が今どこにいるかを確認していけばよさそう。ただ、それで解けることはわかっても、具現化するのが自分の力ではかなり厳しそう。もう少し考える。再帰でどうだ。Nの一つ小さな問題が解けてるなら解けるのでは?解けそうだ。変数をグローバルに移動させる。ラムダ式再帰も知ってるし最近書いたし便利なんだけど、よどみなく書けるほどには覚えてないので普通にグローバル関数で。けっこう冗長気味に書くチキン戦法(それが無難なのかは知らない)。けっこう区切りが多いから境界や実装量で困ってたけど、1段分だけやればいい再帰は素晴らしい。前半部分を足し忘れてサンプル蹴られる。直して合ったらやはり即提出だ。

終わってみれば簡単回(自分にとって簡単だったかはともかく)。基本を確認できるいい問題だった。