癒しがほしい

猫並みにゆるく生きています

AtCoder Beginner Contest 115 D - Christmas

全完やったああああ!(初めてかもしれない) AGCも頑張るぞおおお(白目)

問題

beta.atcoder.jp

多次元バーガーは以下のようなものです。

  • レベル0バーガーとは、パティ1枚である。
  • レベルLバーガー(L\geq1)とは、バン1枚、レベルL-1バーガー、パティ1枚、レベルL-1バーガー、バン1枚、をこの順にしたから積み重ねたものである。

レベルNバーガーを作ったときに、下からX枚を食べると、何枚のパティを食べることができるか。

解説

レベルLバーガーの構成は以下のようになる。

f:id:donko110:20181208233500p:plain

ここで、Xがどこまで伸びているかによって食べられるパティの枚数は変わってくるので、場合分けして枚数を数えてみる。

レベルLで食べることのできるパティの枚数をP_Lとすると、以下のように場合分けできる。

  • Xが真ん中のパティより上もしくは同じ位置の時

f:id:donko110:20181208234549p:plain

P_L = (P_{L-1} + 1) + (真ん中のパティより上側のレベルL-1バーガーで食べることのできるパティの枚数)

  • Xが真ん中のパティより下の時

f:id:donko110:20181208234603p:plain

P_L = (レベルL-1バーガーで食べることのできるパティの枚数)

後はそれぞれのレベルについて食べられるパティの枚数を、その時のXに応じて数え上げると答えが求まる。

ここで、レベルL-1バーガーを食べる時も、同様に数え上げることができるので、レベルNバーガーを下からX枚食べた時のパティの枚数を数えることができる。

ただし、端のバンや、終了条件を注意して実装する必要がある。

提出

(書き直してないので、汚いです。ごめんなさい。。。)

beta.atcoder.jp

感想

全完はうれしかった。誰か褒めてくれると喜びます。

ちなみに本番はこんな感じだったよ。

同じことを繰り返すだけなので、再帰で書いてもループで書いても大差ないと思うけど、バーガーの構成が再帰的になってて綺麗だから、再帰で書きたくなる。

バグる

∑(O_O;)

ミスに気付く

バグる

Σ┌( ┐*)┐

...

みたいなことを8回繰り返しました...(あほすぎる)

モチベーション上がってきたので、競プロ頑張りゅ~ (ゆるキャンの物販行ってきたのでバイアスがかかっています)