社区讨论
站外题求助
学术版参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lo2ow0c4
- 此快照首次捕获于
- 2023/10/23 17:22 2 年前
- 此快照最后确认于
- 2023/10/23 17:22 2 年前
题目描述
圣诞节本节,猪妈妈决定在自己的聚会上制作一个多维汉堡。
对于一个 级汉堡: 级汉堡是肉, 级汉堡 由方包, 级汉堡,肉饼, 级汉堡和另一个方包,从底部开始按此顺序垂直堆叠而成。
例如:一级汉堡和二级汉堡看起来像
猪妈妈将制作的汉堡为 级汉堡包,佩琦将从这个汉堡的底部往上吃共 层(一层是肉饼或方包)。请问她能吃到多少块肉饼?
对于一个 级汉堡: 级汉堡是肉, 级汉堡 由方包, 级汉堡,肉饼, 级汉堡和另一个方包,从底部开始按此顺序垂直堆叠而成。
例如:一级汉堡和二级汉堡看起来像
BPPPB 和 BBPPPBPBPPPBB(旋转 90 度),其中 B 代表方包, P 代表肉饼。猪妈妈将制作的汉堡为 级汉堡包,佩琦将从这个汉堡的底部往上吃共 层(一层是肉饼或方包)。请问她能吃到多少块肉饼?
输入格式
两个正整数, 和 。
输出格式
一个正整数,代表佩琦能吃到的馅饼数量。
样例输入
CPP2 7
样例输出
CPP4
数据范围
对于 100% 的数据: ;, 小于总层数。
代码(0pts)
CPP#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;
}
救救孩子吧,快调吐了
回复
共 3 条回复,欢迎继续交流。
正在加载回复...