1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cstdio>
  6. #include<cmath>
  7. using namespace std;
  8. int dp[][],a[];
  9. inline int read()
  10. {
  11. register int ans=,f=;char ch=getchar();
  12. while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
  13. while(isdigit(ch)) {ans=ans*+ch-'';ch=getchar();}
  14. return ans*f;
  15. }
  16. int dfs(int wi,int cha,bool lim,bool fir) //枚举到哪一位,sum0-sum1,限制,是否有前导0
  17. {
  18. if(wi<)
  19. return cha==;
  20. if(!lim&&!fir&&dp[wi][cha]>-)
  21. return dp[wi][cha];
  22. int o=lim? a[wi]:;
  23. int ans=;
  24. if(fir)
  25. {
  26. if(wi!=)
  27. ans+=dfs(wi-,cha,lim&&a[wi]==,fir);
  28. else
  29. ans+=dfs(wi-,cha-,lim&&a[wi]==,fir);
  30. }
  31. else
  32. ans+=dfs(wi-,cha-,lim&&a[wi]==,fir);
  33. if(o>=)
  34. ans+=dfs(wi-,cha+,lim&&a[wi]==,); //a[wi]==1/0
  35. if(!lim&&!fir)
  36. dp[wi][cha]=ans;
  37. return ans;
  38. }
  39. int sol(int x)
  40. {
  41. int w=,ans=;
  42. while(x)
  43. {
  44. a[++w]=x&;
  45. x/=;
  46. }
  47. for(int i=;i<=w;i++)
  48. ans+=dfs(w,i+,,);
  49. return ans;
  50. }
  51. int main()
  52. {
  53. int s,f;
  54. s=read();f=read();
  55. for(int i=;i<;++i)
  56. for(int j=;j<;++j)
  57. dp[i][j]=-;
  58. int a=sol(f);
  59. int b=sol(s-);
  60. printf("%d\n",a-b);
  61. return ;
  62. }
  1. 数位dp,dp[i][j]表示考虑到第i位(二进制位),剩下的位中0的个数与1的个数的差为j的数的个数。
    j可能为负,需要统一加上一个数(32吧)
    这道题需要考虑前导0,因为如果前面都是0的话,后面的0就不能算在里面

求范围内【l,r] , 内二进制的零比一多的数的更多相关文章

  1. UPC 2224 Boring Counting (离线线段树,统计区间[l,r]之间大小在[A,B]中的数的个数)

    题目链接:http://acm.upc.edu.cn/problem.php?id=2224 题意:给出n个数pi,和m个查询,每个查询给出l,r,a,b,让你求在区间l~r之间的pi的个数(A< ...

  2. luogu P3834 【模板】可持久化线段树 1(主席树) 查询区间 [l, r] 内的第 k 小/大值

    ————————————————版权声明:本文为CSDN博主「ModestCoder_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https:// ...

  3. hdu 4630 查询[L,R]区间内任意两个数的最大公约数

    No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. CF 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和(数位DP)

    题意: 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和 分析:考虑用状态压缩 , 10给位0~9 , 如果之前出现过了某个数字x ,那就拿当 ...

  5. Help Hanzo lightof 1197 求一段区间内素数个数,[l,r] 在 [1,1e9] 范围内。r-l<=1e5; 采用和平常筛素数的方法。平移区间即可。

    /** 题目:Help Hanzo lightof 1197 链接:https://vjudge.net/contest/154246#problem/M 题意:求一段区间内素数个数,[l,r] 在 ...

  6. SQL Server 2016将内置R语言?

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:随着大数据成为一个BuzzWord,和大数据相关的技术也变得越来越火热,其中就包括R语 ...

  7. 主席树——求区间[l,r]不同数字个数的模板(向左密集 D-query)

    主席树的另一种用途,,(还有一种是求区间第k大,区间<=k的个数) 事实上:每个版本的主席树维护了每个值最后出现的位置 这种主席树不是以权值线段树为基础,而是以普通的线段树为下标的 /* 无修改 ...

  8. SQL Server 2016将内置R语言

    题记:随着大数据成为一个BuzzWord,和大数据相关的技术也变得越来越火热,其中就包括R语言.而据说SQL Server 2016将会内置R语言支持? R语言作为一个存在很久的语言,在大数据热炒之后 ...

  9. HDU 6356 (线段树-l,r 之间小于val 的变val+单点求值)

    题目描述: 给你一个长度为n的最开始为0的数以及m个更新操作以及数据生成器参数X,Y,Z.每次操作,将由数据生成器生成出li,ri,vi.让你从区间[li,ri]中,将所有小于vi的数变为vi.最后让 ...

随机推荐

  1. 转载-你应该知道的 RPC 原理

    在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互联网公司就会发现,公司的系 ...

  2. [Python Study Notes]行人检测

    # -------------------------------------------------------------- # @文件: 行人识别.py # @工程: blog # @时间: 2 ...

  3. IE6中浮动双边距bug

    想要创建出漂亮的网页设计, 除了要认真学习每一个html和CSS代码之外,不可能不去了解一下臭名昭著的IE6和更早的那些IE浏览器的坏脾气,因为你本来写出的规规矩矩的代码, 漂亮的设计就此就要完成了, ...

  4. solr笔记--solr3.2以后支持document和json两种对象来更新索引

    1.json形式(比如把mongodb数据库的导出结果json) <requestHandler name="/update" class="solr.JsonUp ...

  5. var_dump — 打印变量的相关信息

    <?php $a = array( 1 , 2 , array( "a" , "b" , "c" )); var_dump ( $a ...

  6. Struts2框架01【如果使用struts框架】【利用struts框架写一个 hello world】

    1 什么是Struts2框架 基于MVC设计模式的web应用框架 Struts2框架是一个轻量级的MVC流程框架 轻量级是指程序的代码不是很多,运行时占用的资源不是很多,MVC流程框架就是说它是支持分 ...

  7. c语言中会遇到的面试题

    预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)         #define SECONDS_PER_YEAR (60 ...

  8. Excel神技能

    按住ALT再按数字41420就可打对号 按住ALT再按数字41409就可打叉号

  9. HTML5之FileReader的使用.RP

    HTML5定义了FileReader作为文件API的重要成员用于读取文件,根据W3C的定义,FileReader接口提供了读取文件的方法和包含读取结果的事件模型. FileReader的使用方式非常简 ...

  10. python的远程调试(使用pycharm)

    测试环境描述1:c++调用python,操作系统环境是linux 2:pycharm安装在windows 安装步骤 1:把pycharm-debug.egg上传到linux上面. 2:使用easy_i ...