总时间限制:1000ms 内存限制: 65536kB
描述
有一条河,左边一个石墩(A区)上有编号为1,2,3,4,…,n的n只青蛙,河中有k个荷叶(C区),还有h个石墩(D区),右边有一个石墩(B区),如下图所示。n只青蛙要过河(从左岸石墩A到右岸石墩B),规则为
(1)石墩上可以承受任意多只青蛙,荷叶只能承受一只青蛙(不论大小);
(2)青蛙可以:A→B(表示可以从A跳到B,下同),A→C,A→D,C→B,D→B,D→C,C→D;
(3)当一个石墩上有多只青蛙时,则上面的青蛙只能跳到比它大1号的青蛙上面。
你的任务是对于给出的h,k,计算并输出最多能有多少只青蛙可以根据以上规则顺利过河?
输入
最多能有多少只青蛙可以根据以上规则顺利过河
输出
这个正整数的位数。
样例输入
2 3
样例输出
16
ac代码
/*
/*
@File : frog_problem.cpp
@Time : 2020/04/14 14:58:14
@Desc : 青蛙过河
*/
#include <iostream>
#include <stdlib.h>
using namespace std;
unsigned long long get_max_frogs(int h, int k)
{
/**
* 如果没有石礅,先将k个青蛙分批到k个荷叶上,
* 将k+1个青蛙移动到最右,最后依次移动k个青蛙
*/
if (h == 0) return k+1;
/**
* 否则,将k个青蛙移到第n-1个石礅
* 最后将n个石礅上青蛙依次移动到最右
*/
else return 2*get_max_frogs(h-1,k);
}
int main(int argc, char const *argv[])
{
int h, k;
cin >> h >> k;
cout << get_max_frogs(h,k) << endl;
system("pause");
return 0;
}