思路:容易发现二进制表示的数的最低位规律是01010101……;接着是001100110011……;接着是:0000111100001111……

这样我们发现每一位的循环节是2^(i+1),前2^i是0,后面的是1.这样就可以算出每一位1出现的次数。

代码如下:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 #define ll __int64
 6 using namespace std;
 7 ll a[35]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,
 8 32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,
 9 16777216,33554432,67108864,134217728,268435456,536870912,1073741824,
10 2147483648,4294967296,8589934592,17179869184};
11 ll sa[35],sb[35],s[100];
12 int get(int n)
13 {
14     int bit=0;
15     while(n){
16         bit++;
17         n>>=1;
18     }
19     return bit;
20 }
21 void solve(int n,ll *aa)
22 {
23     ll i,j,nn=n+1;
24     if(n<=0) return;
25     int len=get(n);
26     for(int k=0;k<len;k++){
27         aa[k]+=nn/a[k+1]*a[k];
28         j=nn%a[k+1];
29         if(j>=a[k]) j-=a[k];
30         else j=0;
31         aa[k]+=j;
32     }
33 }
34 int main()
35 {
36     int n,m,len1,len2;
37     ll c;
38     while(scanf("%d%d",&n,&m)!=EOF){
39         memset(sa,0,sizeof(sa));
40         memset(sb,0,sizeof(sb));
41         memset(s,0,sizeof(s));
42         solve(m,sa);
43         solve(n-1,sb);
44         for(int i=0;i<35;i++) s[i]=sa[i]-sb[i];
45         ll ans=0;
46         for(int i=0;i<100;i++){
47             c=(s[i]>>1);
48             ans+=c;
49             s[i+1]+=c;
50         }
51         printf("%I64d\n",ans);
52     }
53     return 0;
54 }

View Code

转载于:https://www.cnblogs.com/xin-hua/p/3269914.html

hdu 4588 Count The Carries相关推荐

  1. HDU 4588 Count The Carries 数学

    Count The Carries Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest ...

  2. hdu 4588 Count The Carries 南京邀请赛

    题目意思:求a~b 之间数二进制的和 求  进了多少位. 比如  1-3     01+10+11=22   22->30->110 进了 2位 要寻找规律,发现  加到3的时候为22   ...

  3. [HDOJ4588]Count The Carries(数学,规律)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4588 题意:从a加到b,每次结果加到a上,看在二进制下一共发生了多少次进位. 把0到n的所有数二进制下 ...

  4. HDU 3336 Count the string(KMP+DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3336 题意:给你一个字符串,计算其所有前缀在该字符串出现的次数的总和. 思路:next[j]=i,代表 ...

  5. HDU 3336 Count the string KMP

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3336 如果你是ACMer,那么请点击看下 题意:求每一个的前缀在母串中出现次数的总和. AC代码: # ...

  6. Hdu 4916 Count on the path

    意甲冠军:鉴于一棵树的顶点标签为连续1~n,不是每个网上查询a-b最小的圆点标签路径 这题想了好久,如果1为根节点. 首先如果a-b只是根节点1.答案一定是1. 否则我们用fa[i]表示i节点的父亲, ...

  7. HDU 5528 Count a * b

    Count a * b 推式子 f(n)=∑i=0n−1∑j=0n−1n∤ij=n2−∑i=1n∑j=1nn∣ij=n2−∑i=1n∑j=1nngcd(i,n)∣igcd(i,n)j=n2−∑i=1n ...

  8. hdu 4472 Count(递推即dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4472 代码: #include <cstdio> #include <cstring ...

  9. HDU - 6016 Count the Sheep(二分图+思维)

    题目链接:点击查看 题目大意:给出左右两个子集分别,再给出k条边,问能否找出四个点,让其连成一条路径 题目分析:一开始看到这个题肯定是个二分图,又因为有边,我就往度数上面想,一看四个点,就在想能不能枚 ...

最新文章

  1. VS上配置opencv249所添加的附加依赖项
  2. 破译“生命天书”20年
  3. 安装 node_Mac下的Node.js安装教程
  4. hdoj5024【BFS/暴力】
  5. 蓄电池的容量及内阻测试
  6. 账号体系——账号合并的历史数据处理
  7. java 写tb级文件_三管齐下!TB 级文件的上传性能瞬间被优化 100 倍!
  8. LeetCode 1670. 设计前中后队列(deque)
  9. 2020年中国OTT大屏服务行业研究报告
  10. 图文详解什么是OAuth2
  11. 蓝桥 扫雷 java_Java实现 蓝桥杯VIP 算法提高 扫雷
  12. java中logger关闭log_Log4J如何关闭Logger对象的IO流资源
  13. 第四篇、Tomcat 集群
  14. hdu1113 Word Amalgamation(详解--map和string的运用)
  15. 通达OA办公系统的短信服务器(CDMA)
  16. 北京限行规定带来的烦恼
  17. 组网[ZeroTier]+自建Moon服务
  18. 香侬科技提出中文字型的深度学习模型Glyce,横扫13项中文NLP记录
  19. 系统即将关机请保存关机是由nt_电脑频繁自动关机是由NT AUTHORITY SYSTEM初始的分析及解决...
  20. 前端-HTML-web服务本质-HTTP协议-请求-标签-01(待完善)

热门文章

  1. 二、uniapp项目(分段器的使用、scroll-view、视频下载、转发)
  2. Web框架——Flask系列之综合案例——图书管理系统(十)
  3. LeetCode 2079. 给植物浇水(前缀和)
  4. LeetCode 1773. 统计匹配检索规则的物品数量
  5. LintCode MySQL 1918. 第二高的球员的身高
  6. LeetCode 643. 子数组最大平均数 I
  7. LintCode 1677. 石头(自定义优先队列)
  8. LeetCode 888. 公平的糖果交换(哈希set)
  9. 用递归计算一个数字每一位相加的结果。_leetcode 2 两数相加(c++)
  10. vivox27升级鸿蒙,vivo x27 系统更新好吗?