好了,我的数论渣爆了…………

首先[n,m]内的round number显然就是f[m]-f[n-1]

即问0~x内有多少round number;

设x的二进制位数为t;

首先很好分析出在这个范围

若某数的二进制位数<t,则首位1不动,后面组合即可;

然后被卡在当二进制位数为t的round number有多少这招情况;

后来看了别人的解题报告才恍然大悟;

对于x,不算首位的1,只要把当前某一个1改成0,并对后面位数重新01组合就一定小于x,

于是

对于x的每一位1,对后面重新组合即可

显然最终答案不会爆maxlongint

现在想想,其实就是数位dp的思想

 var c:array[..,..] of longint;
    a:array[..] of longint;
    n,m:longint;
procedure prepare;  //预处理组合数
  var i,j:longint;
  begin
    c[,]:=;
    for i:= to do
    begin
      c[i,]:=;
      c[i,i]:=;
      for j:= to i- do
        c[i,j]:=c[i-,j]+c[i-,j-];
    end;
  end; function count(x:longint):longint;
  var p,t,i,j,q,s1,s0:longint;
  begin
    fillchar(a,sizeof(a),);
    if x= then exit();
    p:=x;
    t:=;
    while p<> do                  //十转二
    begin
      t:=t+;
      a[t]:=p mod ;
      p:=p shr ;
    end;
    count:=;                     //考虑0
    for i:= to t- do            //当二进制位数小于t
    begin
      if i mod = then q:=(i-) div +    //保证0比1多
      else q:=i div ;
      for j:=q to i- do
        count:=count+c[i-,j];
    end;
    s0:=;
    s1:=;
    for i:= to t do              //先特判x是否是round number    
      if a[i]= then inc(s1) else inc(s0);
    if s0>=s1 then count:=count+;
    s0:=;
    s1:=;
    for i:=t- downto do      
      if a[i]= then
      begin
        for j:=i- downto do       //j表示后面可能出现0的个数
          if j+s0+>=i--j+s1 then  //保证0比1多,i-表示当前位1后面的,+表示将这位1变成0后后面重新组合
            count:=count+c[i-,j]
          else break;
        inc(s1);                   //别忘统计前面的0,个数,后面的排列情况是由起决定的
      end
      else inc(s0);
  end;
begin
  readln(n,m);
  prepare;
  writeln(count(m)-count(n-));      //经常用到的转化思想
end.

poj3252的更多相关文章

  1. [BZOJ1662][POJ3252]Round Numbers

    [POJ3252]Round Numbers 试题描述 The cows, as you know, have no fingers or thumbs and thus are unable to ...

  2. POJ3252——Round Number(组合数学)

    Round Numbers DescriptionThe cows, as you know, have no fingers or thumbs and thus are unable to pla ...

  3. [poj3252]Round Numbers_数位dp

    Round Numbers poj3252 题目大意:求一段区间内Round Numbers的个数. 注释:如果一个数的二进制表示中0的个数不少于1的个数,我们就说这个数是Round Number.给 ...

  4. POJ3252 Round Numbers 【数位dp】

    题目链接 POJ3252 题解 为什么每次写出数位dp都如此兴奋? 因为数位dp太苟了 因为我太弱了 设\(f[i][0|1][cnt1][cnt0]\)表示到二进制第\(i\)位,之前是否达到上界, ...

  5. poj3252(数位dp)(模板)

    题目链接:https://vjudge.net/problem/POJ-3252 题意:求[l,r]之间的Round Number数,RN数即化为二进制后0的个数不少于1的个数的数. 思路:之前用组合 ...

  6. POJ3252 Round Numbers(不重复全排列)

    题目问区间有多少个数字的二进制0的个数大于等于1的个数. 用数学方法求出0到n区间的合法个数,然后用类似数位DP的统计思想. 我大概是这么求的,确定前缀的0和1,然后后面就是若干个0和若干个1的不重复 ...

  7. poj3252 Round Numbers

    Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7625   Accepted: 2625 Des ...

  8. poj3252 组合数学

    题目大意:给两个数字a,b求出[a,b]中转化成二进制后0的个数大于等于1的个数的数 例如1100转化成10-11,100-111,1000-1011,1100.保证每个区段都有1打头,然后有一段数字 ...

  9. poj3252(数位dp)

    题目连接:http://poj.org/problem?id=3252 题意:拆成2进制,在记录0和1的个数 求区间[a,b]中,满足传化成2进制后,0的个数>=1的个数的数字的个数... 分析 ...

随机推荐

  1. firefox 自定义快捷键

    firefox 更新到44或45,发现原来的更改快捷键的扩展没了!!!

  2. 服务器迁移之debian重新配置Web服务的细节

    之前配置Linux服务器时采用的是Debian系统一直很稳定,这次准备迁移到新的服务器环境上,好在以前的配置我在博客都做了备忘,所以很容易就搞定了,这次服务系统采用的是最新的Debian 7.0,但是 ...

  3. php语法检查方法——命令行模式和代码形式

    1. 命令行形式 php -l /path/to/file.php 2. php代码形式 function php_syntax_check($file){ $code = file_get_cont ...

  4. 关于maven参数过滤

    一.maven通过设置过滤器,可以使maven在编译打包时实现参数过滤的功能(详细配置说明略) <filters> <filter>../antx.properties< ...

  5. UTF8后MD5

    function ToUTF8Encode(str: string): string; //将字符串转UTF8编码 var b: Byte; begin for b in BytesOf(UTF8En ...

  6. Python遍历路径下所有文件

    开始学Python,这篇文章来自于应用需求. os.walk很方便,下面写了两个版本的函数进行遍历,分别是不使用walk和使用walk的. import sys import string impor ...

  7. Oracle监听器—静态注册

    注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库.这个服务名可能与实例名一样,也有可能不一样. 注册分: 1. 静 ...

  8. Java 多线程 简单实例 (消费者与生成者)的关系

    PS::线程这套东西在PHP里完全是不存在的概念,有待进一步的学习: PS::这个实例是根据书本上的知识进行扩展的,理解程度50%左右吧! 1.定义生产消费环境 package second; pub ...

  9. tableView的基本使用(改良版)

    @interface ViewController ()<UITableViewDataSource, UITableViewDelegate> { int i;//用来计算接受通知的次数 ...

  10. SpringMVC注解@RequestParam(转)

    鸣谢:http://shawnccx.iteye.com/blog/730239 -------------------------------------------------- 在SpringM ...