圣诞节本节,猪妈妈决定在自己的聚会上制作一个多维汉堡。
对于一个 L 级汉堡:0 级汉堡是肉,L 级汉堡 (L≥1) 由方包,(L−1) 级汉堡,肉饼,(L−1) 级汉堡和另一个方包,从底部开始按此顺序垂直堆叠而成。
例如:一级汉堡和二级汉堡看起来像 BPPPB 和 BBPPPBPBPPPBB(旋转 90 度),其中 B 代表方包, P 代表肉饼。
猪妈妈将制作的汉堡为 N 级汉堡包,佩琦将从这个汉堡的底部往上吃共 X 层(一层是肉饼或方包)。请问她能吃到多少块肉饼?
两个正整数,N 和 X。
一个正整数,代表佩琦能吃到的馅饼数量。
2 7
4
对于 100% 的数据:0≤L ;1≤N≤50,X 小于总层数。
#include<bits/stdc++.h>
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define ll long long
using namespace std;
ll n,x;
ll dfs(ll l,ll p){
if(l==0)return 1;
if(p<=1)return 0;
ll len=(1ll<<(l-1))+pow(3,l-1);
if(p<=1+len)return dfs(l-1,p-1);
if(p<=2+len)return 1+dfs(l-1,len);
if(p<=2+2*len)return 1+dfs(l-1,len)+dfs(l-1,p-2-len);
return 1+2*dfs(l-1,len);
}
int main(){
cin>>n>>x;
cout<<dfs(n,x);
return 0;
}
救救孩子吧,快调吐了