hdu 4588 (加法进位次数统计)
来源:互联网 发布:天狼星商品期货软件 编辑:程序博客网 时间:2024/06/11 15:41
1 21 31 41 6
0236题目大意:给两个数a、b,转成二进制,从a + (a+1) + (a+2) + ... + b,一共需要进位多少次。就是把转换成二进制每一竖行有多少个一记录下来:
举个例子9行吧:
9 8 7 6 5 4 3 2 1
0 0 0 0 0 0 0 0 0(0)
0 0 0 0 0 0 0 0 1(1)
0 0 0 0 0 0 0 1 0(2)
0 0 0 0 0 0 0 1 1(3)
0 0 0 0 0 0 1 0 0(4)
0 0 0 0 0 0 1 0 1(5)
0 0 0 0 0 0 1 1 0(6)
0 0 0 0 0 0 1 1 1(7)
0 0 0 0 0 1 0 0 0(8)
: : :::::::
: : : : : : ::
就这样会发现规律:
就是第一竖行就是1和0交替出现,
第二竖行是00 11交替出现,
第三竖行是0000 1111交替出现等等
计算1的个数,然后求需要进位的值....思路:拆成二进制来看的话,考虑第一位,假设从1~b有x1个数的第一位是1,从1~a-1有x2个数的第一位是1,那么从a~b就有(x1-x2)个数第一位是1,那么在第一位需要进位的次数就为(x1-x2)/2。假设从a~b有x3个数第二位是1,那么在第二位需要进位的次数就为((x1-x2)/2 + x3)/2。以此类推。
至于算1~x有多少个第p位是1的方法,我做的比较奇葩……比如第二位,从1~x都是重复001100110011……那么就会有x/4个0011,总共就有x/4*4/2个1……之后看x%4之后还有多少个数,如果大于4的一半,就加上x%4-(4/2)(比如00110011001,要把最后的1加回去)。
#include<cstdio>#include<cstring>#include<map>#include<vector>#include<cmath>#include<cstdlib>#include<stack>#include<queue>#include <iomanip>#include<iostream>#include<algorithm>using namespace std ;typedef long long LL ;int a,b ;LL carry,ans ,now ;LL get(int x , int p) { x++ ; //注意加1 ; 因为从0开始,比如 6 , 他是第7行 ; LL v = (1LL<< p) , num = 0 ; // 1LL<<p ; 表示结果是longlong范围,不然值在int范围。 num = x/v * v /2 ; x = x % v ; if(x > (v/2)) num += x - (v/2) ; return num ;}int main(){ while(~scanf("%d%d",&a,&b)) { carry = ans = 0 ; now=1; while( (1LL<< now) <= b || carry > 0 ) //控制v小于b { carry += get(b,now)-get(a-1,now) ; //第now位1的个数 ans += carry >> 1 ; carry >>= 1 ; now++ ; } cout << ans << endl ; } return 0;}
- hdu 4588 (加法进位次数统计)
- HDU 4588 统计二进制加法进位次数
- HDU 4588--二进制的加法进位统计
- 加法进位次数
- BNUoj Carries 统计进位的次数(优化)
- 加法进位
- HDU 1250 Hat's Fibonacci 大数加法 进位10000000
- 大数的加法 进位
- 先行进位加法
- 实现进位的加法算法
- 进位次数(大整数)
- 【C++】计算进位的次数
- HDU 4596 (Yet another end of the world)(二进制进位次数和)
- hdu 3336 next数组统计前缀次数
- 【算法竞赛】:进位数统计
- XMU 1608 nc与加法进位 【二分】
- HDU 4588 Count The Carries 计算二进制进位总数
- hdu 1251 统计难题 (统计前缀出现次数)
- java 枚举
- LayoutInflater作用及使用 http://blog.sina.com.cn/s/blog_629b701e0100rg4d.html
- 绘图
- 浅析.NET中的Serialization
- spring c3p0数据源配置
- hdu 4588 (加法进位次数统计)
- 最小树形图
- pomelo组就之server组件分析
- 对话框(Dialog box)
- Lua 协程随笔
- Atlas应用程序调试技巧
- el表达式
- 选中的磁盘采用GPT分区形式 无法安装系统 解决方法
- 4种Android屏幕自适应解决方案