A、青蛙过河

是不是乍一眼看起来像哈诺塔……恭喜你被骗了。汉诺塔可以随意移动,虽然也有一定前提。但是对这个题目来说最要命的约束条件就是到了对面就不能动了。
所以就决定了,一定是重的青蛙先跳去对面。所以我们从几个极端来看。
如果给出莲叶数是n,石头数目是m。
如果m是0,那么最多可以允许 n + 1 个青蛙,n个青蛙填满莲叶,最后一个青蛙跳过去。
如果m是1,那么最多允许 n + 1 个青蛙先填满莲叶,在去石头上面过渡,另外的 n + 1 个青蛙根据 m = 0 的情况跳。所以一共 (n + 1) * 2
……所以得到 n m 和答案的关系 图片说明
每多一个垫脚石 答案乘个2。

#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
using namespace std;
#define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
typedef long long ll;
inline ll read() { ll s = 0, w = 1; char ch = getchar(); while (ch < 48 || ch > 57) { if (ch == '-') w = -1; ch = getchar(); }    while (ch >= 48 && ch <= 57) s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();    return s * w; }

int main() {
    int n = read(), m = read();
    int    ans = (m + 1) * (1 << n);
    printf("%d\n", ans);
    return 0;
}