传送门:https://uva.onlinejudge.org/external/6/p679.pdf
题意:在一颗结点带开关的完全二叉树上扔球,初始时开关为关闭状态,树的深度为D(1 <= D <= 20), 根结点为1(节点从1开始到2D-1),开关为关闭向左子结点走,否则往右子结点走,每到一个结点改变该结点开关状态。问第 I 颗球落在哪。
当 I 是奇数时, 它是往当前结点的左子结点走的第 (I + 1) / 2 颗球;
当 I 是偶数时, 它是往当前结点的右子结点走的第 I / 2 颗球;
思路挺有趣的(又一次虐我智商) 虽然好像可以暴力..........
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin >> t;
while(t--){
int n, m;
cin >> n >> m;
int i = ;
while(i < (<<n)){
if(m & ){
i <<= ;
++m;
m >>= ;
}
else{
i <<= ;
++i;
m >>= ;
}
}
cout << (i >> ) << endl;
}
cin >> t;
return ;
}