yakataの情報奮闘記

プログラミングの話をします

ABC115D

考えのまとめ。実装はまだなので、TLEが出るかもしれないけれど共有。

とりあえずN=N_maxのときのバーガーの層の数を求めてみる。これは漸化式を解くだけ。レベルNバーガーの層の数をL(N)とおくと

L(N_max)=2^(N_max+2)-3=2^52-3

これをすべて求めるのはO(10^8)を大きく超えるので、そのまま求めるのは不可能

問題文よりバーガーには対称性がある。その半分はB(レベルN-1バーガー)Pという形をしている。このレベルN-1バーガーには同様に対称性が適応出来る。

これらより、tmp_x = Xとして

i tmp_x>=L(N)/2のとき
ansにレベルNバーガーのPの数+1をaddしてレベルN-1バーガーに対して同様の処理を行う。このときtmp_x-=L(N/2)とする

ii tmp_x<L(N)/2のとき
ansに何もせず、レベルN-1バーガーに同様の処理を行う。このときtmp_x-=1とする

iii N=0のとき
tmp_x=0ならば0、tmp_x=1ならば1をansに足す。

でいけるはず。