二叉樹模擬
#include <cstdio>
#include <cstring>
using namespace std;
const int maxd = 20;
bool s[1<<maxd];
int index;
int main() {
int d,n;
while(scanf("%d%d",&d,&n)!=EOF){
memset(s,0,sizeof(s));
int ma=(1<<d)-1;
for(int i=0;i<n;i++){
index=1;
for(;;){
s[index]=!s[index];
if(!s[index])index=index*2+1;
else index=index*2;
if(index>ma)break;
}
}
printf("%d\n",index/2);
}
return 0;
}
白書代碼,奇偶性是判斷向左還是向右的關鍵
#include <cstdio>
#include <cstring>
using namespace std;
const int maxd = 20;
int main() {
int d,n,index,m;
while(scanf("%d",&m)&&m!=-1){
while(m--){
scanf("%d%d",&d,&n);
index=1;
for(int i=0;i<d-1;i++){
if(n%2){
n=n/2+1;
index=index*2;
}
else{
n=n/2;
index=index*2+1;
}
}
printf("%d\n", index);
}
}
return 0;
}