AtCoder ABC115D - Christmas
本番通せなかった上に、再帰ではなく二分探索を用いて解いたので書いておきます。
問題概要
解説
より、単純に下から 層を探索をすると間に合わないことがわかります。ここで、バーガーのレベルが上がるごとに、バーガーの全長が指数的に長くなることを考えると、二分探索で解けそうな気がしてきます。実際この問題は二分探索で解くことができて、次のように つの場合に分けて考えます。 ただし、現在レベル バーガーを見ているとし、下から 層目の位置を考えます。また、 はレベル バーガーの中心のパティを指すようにします。
下から 層目が、
1. バーガーの最も下にあるバンであるとき
二分探索を終える。
2. バーガーの最も下にあるバンよりも上で、 バーガーの中心のパティよりも下にあるとき(下の バーガーに含まれるとき)
次に が下の バーガーの中心を指すように、 とする。
3. バーガーの中心のパティであるとき
下の バーガーすべてと バーガーの中心のパティを食べるので、答えにそれらを加え二分探索を終える。
4. バーガーの中心のパティよりも上で、 バーガーの最も上にあるバンよりも下にあるとき(上の バーガーに含まれるとき)
次に が上の バーガーの中心を指すように、 とする。また、下の バーガーすべてと バーガーの中心のパティを食べるので、答えにそれらを加える。
5. バーガーの最も上にあるバンであるとき
バーガーをすべて食べるので、それを答えに加えて二分探索を終える。
で 2, 4 の分岐に入ったときは、レベル のパティを足すことに注意が必要です。
ソースコード
二分探索をする前に バーガーまでのパティの含まれる数、バーガーの全長を求めておきます。