AtCoder Beginner Contest 115 D - Christmas
全完やったああああ!(初めてかもしれない) AGCも頑張るぞおおお(白目)
問題
多次元バーガーは以下のようなものです。
- レベル0バーガーとは、パティ1枚である。
- レベルバーガーとは、バン1枚、レベルバーガー、パティ1枚、レベルバーガー、バン1枚、をこの順にしたから積み重ねたものである。
レベルバーガーを作ったときに、下から枚を食べると、何枚のパティを食べることができるか。
解説
レベルバーガーの構成は以下のようになる。
ここで、がどこまで伸びているかによって食べられるパティの枚数は変わってくるので、場合分けして枚数を数えてみる。
レベルで食べることのできるパティの枚数をとすると、以下のように場合分けできる。
- が真ん中のパティより上もしくは同じ位置の時
= ( + 1) + (真ん中のパティより上側のレベルバーガーで食べることのできるパティの枚数)
- が真ん中のパティより下の時
= (レベルバーガーで食べることのできるパティの枚数)
後はそれぞれのレベルについて食べられるパティの枚数を、その時のに応じて数え上げると答えが求まる。
ここで、レベルバーガーを食べる時も、同様に数え上げることができるので、レベルバーガーを下から枚食べた時のパティの枚数を数えることができる。
ただし、端のバンや、終了条件を注意して実装する必要がある。
提出
(書き直してないので、汚いです。ごめんなさい。。。)
感想
全完はうれしかった。誰か褒めてくれると喜びます。
ちなみに本番はこんな感じだったよ。
同じことを繰り返すだけなので、再帰で書いてもループで書いても大差ないと思うけど、バーガーの構成が再帰的になってて綺麗だから、再帰で書きたくなる。
↓
バグる
↓
∑(O_O;)
↓
ミスに気付く
↓
バグる
↓
Σ┌( ┐*ロ)┐
↓
...
みたいなことを8回繰り返しました...(あほすぎる)
モチベーション上がってきたので、競プロ頑張りゅ~ (ゆるキャンの物販行ってきたのでバイアスがかかっています)