URAL 1117. Hierarchy 数学 找规律 二叉树
2013-08-04 13:15
483 查看
十分佩服DC学长,问他递推公式怎么得到的,他说他在纸上一划拉就划拉出来了,好吧。。。。。不过在他的指点下,还有题解的帮助下,我又仔细想了想,终于把这道题悟出来了。
1.一次递推出1——2,1——4,……1——2^k所需的步骤,这个可以找规律的。
k=1时,即1——2, 步数:0
k=2时,即1——4, 步数:1
k=3时,即1——8, 步数:4
k=4 时,即1——16, 步数:11
k=5时,即1——32, 步数: 26
可以发现1,4,11,26,后面一个比前一个大3,7,15,即2^(k-1)-1
2.求A到B的步数可以转化为1到B的步数减1到A的步数。
3.求1到a的步数如1——24.=(1——16)+(16——17)+(17——24) 而(17——24)就相当于1——8(24-16)。同样找规律可以发现2^k到2^k+1所需步数是k-1
1.一次递推出1——2,1——4,……1——2^k所需的步骤,这个可以找规律的。
k=1时,即1——2, 步数:0
k=2时,即1——4, 步数:1
k=3时,即1——8, 步数:4
k=4 时,即1——16, 步数:11
k=5时,即1——32, 步数: 26
可以发现1,4,11,26,后面一个比前一个大3,7,15,即2^(k-1)-1
2.求A到B的步数可以转化为1到B的步数减1到A的步数。
3.求1到a的步数如1——24.=(1——16)+(16——17)+(17——24) 而(17——24)就相当于1——8(24-16)。同样找规律可以发现2^k到2^k+1所需步数是k-1
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #define LL long long using namespace std; LL d[100]= {0}; void inlinee() { d[2]=1; for(int i=3; i<=31; i++) { d[i]=d[i-1]+(1LL<<(i-1))-1; } } LL comp(LL a) { LL ans=0; for(int i=31; i>=0; i--) { if((1LL<<i)<=a) { ans+=d[i]; a-=(1LL<<i); if(a>0) ans+=i-1; } } return ans; } int main() { //freopen("in.txt","r",stdin); LL start,end; cin>>start>>end; inlinee(); LL s=comp(start); LL e=comp(end); cout<<(s>e?s-e:e-s)<<endl; return 0; }
相关文章推荐
- URAL 1295. Crazy Notions(数学啊 & 找规律)
- URAL 1051 跳跳棋(孔明棋)(加强版) 数学找规律(较弱哦)
- ural 2029 Towers of Hanoi Strike Back (数学找规律)
- URAL —— 1255 & HDU 5100——Chessboard ——————【数学规律】
- URAL 1295 Crazy Notions 数学 找规律
- URAL 1117. Hierarchy
- hdoj Cube 1220 (数学规律&排列组合)找正方体
- hdu 5584 LCM Walk <二叉树找规律,二进制相关>
- NYOJ 题目189 兔子的烦恼(一)(数学,找规律)
- Ural 1082|Gaby Ivanushka|数学推导|快速排序|程序分析
- HDU 4342 History repeat itself(数学规律)
- URAL 1814 Continued Fraction 数学 矩阵乘法
- (数学,拆分数字,找规律)整数对-HDOJ
- (数学,小数化分数的规律)小数化分数2-HDOJ
- Codeforces Round #272 (Div. 2) D. Dreamoon and Sets (思维 数学 规律)
- codeforces#292-C - Drazil and Factorial-数学规律题
- A -- Alarm(大数打表+数学规律+素数打表)
- URAL 2037 Richness of binary words (回文子串,找规律)
- URAL 1874. Football Goal(数学 浮点数三分)
- hdu 1030 Delta-wave(数学题+找规律)