https://cn.vjudge.net/problem/UVA-679#author=0

二叉树第一题 上图上图 模拟来理解树的结构

#include<algorithm>
#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<ctime>
#include<map>
#include<stack>
#include<set>
#include<cstring>
#include<sstream>
using namespace std;
typedef long long ll;
const int maxn = 20;
int s[maxn << maxn];
int main() {
	int D, I;//D深度 I小球个数
	while (scanf("%d%d", &D, &I) == 2) {
		memset(s, 0, sizeof(s));
		int k, n = (1 << D) - 1;//n是最大编号
		for (int i = 0; i < I; i++) {
			k = 1;
			for (;;) {
				s[k] = 1 - s[k];//取反
				k = s[k] ? 2 * k : 2 * k + 1;//相同状态则往左走 否则往右走
				if (k > n) break;
			}
		}
		printf("%d\n", k / 2);
	}
	return 0;
}


愿风指引你的道路,愿你的刀刃永远锋利。