主要考察组合数知识,初始化的时候参考公式
首先先推个公式,就是长度为len的Round Numbers的个数。
     长度为len,第一位肯定是1了。
     那么后面剩下 len-1位。
     如果len-1是偶数。
     那么  C(len-1,(len-1)/2+1)+C(len-1,(len-1)/2+2)+````C(len-1,len-1)
=   ( 2^(len-1)-C(len-1,(len-1)/2) )/2;
    如果len是奇数
   那么就是 (  2^(len-1) )/2
 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=;
int m,t;
int c[maxn][maxn];
int bit[maxn];
void init() //初始化组合数
{
c[][]=c[][]=c[][]=;
for(int i=;i<=;i++)
{
c[i][]=;
for(int j=;j<i;j++)
c[i][j]=c[i-][j]+c[i-][j-];
c[i][i]=;
}
}
int calc(int n) //求小于等于n的round数的和
{
if(n<=) return ;
int len=;
while(n>) //求出该数的二进制表示
{
if(n&) bit[len++]=;
else bit[len++]=;
n>>=;
}
int ans=;
for(int i=len-;i>;i--) //求出长度小于len的round数的和
{
if(i%==)ans+=((<<(i-)))/;
else ans+=((<<(i-))-c[i-][(i-)/])/;
}
int c1=,c0=;
for(int i=;i<len;i++)
{
if(bit[i]==) c0++;
else c1++;
}
if(c0>=c1) ans++; //该数本身是round数
c1=;c0=;
for(int i=len-;i>=;i--) //注意计数是从零开始的
{
if(bit[i]==) //该位可以变成零
{
for(int j=i;j>=&&j+c0+>=i-j+c1;j--) ans+=c[i][j]; //j是准备添加的0的数目
c1++;
}
else c0++;
}
return ans;
}
int main()
{
int i,j,k;
init();
int a,b;
//freopen("1.in","r",stdin);
while(scanf("%d%d",&a,&b)!=EOF)
{
printf("%d\n",calc(b)-calc(a-));
}
return ;
}

poj 3252 组合数的更多相关文章

  1. POJ 3252 (数位DP)

    ###POJ 3252 题目链接 ### 题目大意:给你一段区间 [Start,Finish] ,在这段区间中有多少个数的二进制表示下,0 的个数 大于等于 1 的个数. 分析: 1.很显然是数位DP ...

  2. POJ 3252:Round Numbers

    POJ 3252:Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10099 Accepted: 36 ...

  3. poj 3252

    http://poj.org/problem?id=3252//自己搞了很长时间...现在刚刚有点明白.. 1 #include <iostream> using namespace st ...

  4. POJ 3252 Round Numbers(组合)

    题目链接:http://poj.org/problem?id=3252 题意: 一个数的二进制表示中0的个数大于等于1的个数则称作Round Numbers.求区间[L,R]内的 Round Numb ...

  5. poj 3252 Round Numbers 【推导·排列组合】

    以sample为例子 [2,12]区间的RoundNumbers(简称RN)个数:Rn[2,12]=Rn[0,12]-Rn[0,1] 即:Rn[start,finish]=Rn[0,finish]-R ...

  6. [poj 3252]数位dp前导0的处理

    通过这个题对于数位dp中前导0的处理有了新的认识. 题目链接:http://poj.org/problem?id=3252 //http://poj.org/problem?id=3252 #incl ...

  7. [ACM] POJ 3252 Round Numbers (的范围内的二元0数大于或等于1数的数目,组合)

    Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8590   Accepted: 3003 Des ...

  8. Round Numbers(poj 3252)

    题意:算出区间内二进制中0的个数大于等于1的个数的数字有多少个 /* 本来以为用数位DP搞,但是组合数更简单. 我们设n的二进制长度为len. ①:先考虑长度小于len的数字. 这里以数字22为例,二 ...

  9. POJ - 3252 A - Round Numbers

    The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' ...

随机推荐

  1. jquery设置和获得checkbox选中问题

    1.设置checkbox选中: //选中多选框 checkbox=$("#agentinfo input[name='veri[]']"); //循环多选框中的值 checkbox ...

  2. nginx负载均衡的配置方法

    upstream www.***.com { server ; server ; server ; } server { listen ; server_name www.***.com; #char ...

  3. 统一软件开发过程(rup)理解

    不好意思,没有内容,请看百科吧http://baike.baidu.com/link?url=-zXA6oXiHRts5Z1THGzie7seH-YRigfiR7KRppP6TYcnnb7_Bxc_f ...

  4. Lamp学习笔记

    1,php.ini 文件在哪里  /opt/app/php-5.3/etc/php.ini  --------------------------------------------   2014-0 ...

  5. POJ 2513 Colored Sticks

    Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 28036   Accepted: 7428 ...

  6. PHP常量PHP_SAPI与函数php_sapi_name()简介,PHP运行环境检测

    php_sapi_name() 是用来检测PHP运行环境的函数. 该函数返回一个描述PHP与WEB服务器接口的小写字符串. 例如:aolserver, apache,apache2filter, ap ...

  7. UCloud可用区的设计理念及功能图文详解

    导读 过去的几个月内,UCloud对自身的云计算基础架构进行了全面升级,于日前宣布基础架构全面支持地域和可用区,并将可用区项目命名为Sixshot.通过这两层的设计架构来组织云服务,可以为用户提供高可 ...

  8. 国内常用NTP服务器地址及IP

    iptables实现80端口转发到8080端口上 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 ...

  9. Python Template 错误

    ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is und ...

  10. 【转】android中Uri.parse()用法

    1,调web浏览器 Uri myBlogUri = Uri.parse("http://xxxxx.com"); returnIt = new Intent(Intent.ACTI ...