标签:amp ios main 输入 序号 memory else ota sam
2 3
12
队友的奇妙解法,队里都觉得比题解还要好hhh,将n-1转化为二进制,然后从树根开始,遇到1往树的右边走,遇到0往左边走,加起来就是结果了,不过要理解二叉
树的性质和结构,能正确的推断出当前的数的值,其实也不难啦。
1 #include<iostream> 2 #include<cstring> 3 #define LL long long 4 #define stu 1000000007 5 using namespace std; 6 7 int main() 8 { 9 LL h,n; 10 while(cin>>h>>n) 11 { 12 LL num[50],i=0,sum=1,temp=1,ans=1; 13 memset(num,0,sizeof(num)); 14 n=n-1; 15 while(n) 16 { 17 num[i++]=n%2; 18 n=n/2; 19 } 20 i=h; 21 while(h) 22 { 23 temp=1; 24 if(num[--i]) 25 { 26 for(int j = 1; j <= h; j++) 27 { 28 temp*=2; 29 } 30 ans+=temp; 31 sum+=ans; 32 sum=sum%stu; 33 } 34 else 35 { 36 ans+=1; 37 sum+=ans; 38 sum=sum%stu; 39 } 40 h--; 41 } 42 cout<<sum<<endl; 43 } 44 return 0; 45 }
标签:amp ios main 输入 序号 memory else ota sam
原文地址:http://www.cnblogs.com/Xycdada/p/6091678.html