知识点:二叉树
这个题考的完全二叉树的编号,如果一个一个模拟会超时,只能找规律,考虑根节点,如果是奇数个进来的球会掉左边,如果是偶数个的球会掉右边,所以我们考虑的就是小球掉到每一层的顺序是奇数还是偶数,如果是奇数次掉到当前层,那么就是掉到下一层,偶数的话直接除以2即可,这样通过是第奇数次掉到当前层还是第偶数次掉到当前层来得出结果。
#include <bits/stdc++.h>
using namespace std;
int main() {
int l;
cin >> l;
while (l--) {
int d, x;
cin >> d >> x;
int ans = 1;
for (int i = 1; i < d; i++) {
if (x % 2) ans *= 2;
else ans = ans * 2 + 1;
x = (x + 1) / 2;
}
cout << ans << endl;
}
return 0;
}