codeforces 507C

来源:互联网 发布:如何学习linux命令 编辑:程序博客网 时间:2024/05/17 09:01

满二叉树,可以递归求解

因为总是将一棵子树走完之后再到另外一棵

判断出口在左子树还是右子树,再加上走到这棵子树的步数。

#include <cstdio>#include <cstdlib>#include <cmath>#include <set>#include <stack>#include <vector>#include <sstream>#include <cstring>#include <string>#include <map>#include <windows.h>#include <queue>#include <algorithm>#include <iostream>#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;}


0 0
原创粉丝点击