1 #include <cstdio> 2 #include <cstring> 3 4 using namespace std; 5 6 int btr[1<<20]; 7 8 9 int main() 10 { 11 int D,I; 12 13 while(scanf("%d%d",&D,&I)==2) 14 { 15 memset(btr,0,sizeof(btr)); 16 17 int k; 18 19 for(int i=1;i<=I;i++) 20 { 21 k=1; 22 23 for(int j=1;j<=D-1;j++) 24 { 25 if(btr[k]==0) 26 { 27 btr[k]=!btr[k]; 28 k=k*2; 29 } 30 else 31 { 32 btr[k]=!btr[k]; 33 k=k*2+1; 34 } 35 } 36 } 37 38 printf("%d ", k); 39 } 40 } 41 42 /* 43 int main() 44 { 45 int D,I; 46 47 while(scanf("%d%d",&D,&I)==2) 48 { 49 int k=1; 50 51 for(int i=1;i<=D-1;i++) 52 { 53 54 55 if(I%2) 56 { 57 k=k*2; 58 I=(I+1)/2; 59 } 60 else 61 { 62 k=k*2+1; 63 I/=2; 64 } 65 } 66 67 printf("%d ",k); 68 } 69 } 70 71 */ 72 73 /* 74 75 int main() 76 { 77 int D,I; 78 79 while(scanf("%d%d",&D,&I)==2) 80 { 81 int k=1; 82 83 for(int i=1;i<=D-1;i++) 84 { 85 86 87 if(I==1) //当题目是第一次左走其他时候又走时代码是这样 88 k=k*2; 89 else 90 { 91 k=k*2+1; 92 I=I-1; 93 } 94 95 } 96 97 printf("%d ",k); 98 } 99 } 100 101 */