社区讨论

站外题求助

学术版参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo2ow0c4
此快照首次捕获于
2023/10/23 17:22
2 年前
此快照最后确认于
2023/10/23 17:22
2 年前
查看原帖

题目描述

圣诞节本节,猪妈妈决定在自己的聚会上制作一个多维汉堡。
对于一个 LL 级汉堡:00 级汉堡是肉,LL 级汉堡 (L1)(L≥1) 由方包,(L1)(L-1) 级汉堡,肉饼,(L1)(L-1) 级汉堡和另一个方包,从底部开始按此顺序垂直堆叠而成。
例如:一级汉堡和二级汉堡看起来像 BPPPBBBPPPBPBPPPBB(旋转 90 度),其中 B 代表方包, P 代表肉饼。
猪妈妈将制作的汉堡为 NN 级汉堡包,佩琦将从这个汉堡的底部往上吃共 XX 层(一层是肉饼或方包)。请问她能吃到多少块肉饼?

输入格式

两个正整数,NNXX

输出格式

一个正整数,代表佩琦能吃到的馅饼数量。

样例输入

CPP
2 7

样例输出

CPP
4

数据范围

对于 100% 的数据:0L0 \leq L1N501 \leq N \leq 50XX 小于总层数。

代码(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 条回复,欢迎继续交流。

正在加载回复...