站外题求助
  • 板块学术版
  • 楼主qwertim
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/4/28 13:18
  • 上次更新2023/10/23 17:22:38
查看原帖
站外题求助
780539
qwertim楼主2023/4/28 13:18

题目描述

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

输入格式

两个正整数,NN 和 XX。

输出格式

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

样例输入

2 7

样例输出

4

数据范围

对于 100% 的数据:0≤L0 \leq L ;1≤N≤501 \leq N \leq 50,XX 小于总层数。

代码(0pts)

#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;
}

救救孩子吧,快调吐了

2023/4/28 13:18
加载中...