满二叉树,可以递归求解
因为总是将一棵子树走完之后再到另外一棵
判断出口在左子树还是右子树,再加上走到这棵子树的步数。
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define FFI freopen("in.txt", "r", stdin) #define maxn 100010 #define INF 0x3f3f3f3f #define inf 10000000 #define MOD 1000000007 #define ULL unsigned long long #define LL long long #define _setm(houge) memset(houge, INF, sizeof(houge)) #define _setf(houge) memset(houge, -1, sizeof(houge)) #define _clear(houge) memset(houge, 0, sizeof(houge)) using namespace std; int h; LL n; int main() { while(scanf("%d%I64d", &h, &n) == 2) { LL ans = 0; while(h) { ++ans; LL x = 1LL << (h-1); if (n > x) { n -= x; ans += x * 2 - 1; } else { n = x - n + 1; } h --; } printf("%I64d\n", ans); } return 0; }