题目大意:

给定a,b

输出[a,b]的闭区间中round number的数量

所谓round就是一个数在二进制下0的个数大于等于1的个数

0的个数>=1的个数 也就是1的个数<=0的个数

那么 l 长度中, 1的个数num = l / 2 个,如:l=4 num=2, l=5 num=2

而当二进制长度为 l 时,首位肯定为1

那么应在剩下的 l-1 位中 选出 0 到 l / 2 - 1 个位置为1的情况

递推出31内的组合数就够了 因为 2^31 > 2e9

找到a,b二进制的位数 L,R

直接计算 L位 到 R-1位 的所有数量sum

L位中 比a小的 应该从sum中删去

R位中 比b小的 应该加进sum中

如:二进制同样位数下 比 1010100 小的,l=7 l/2=3

(为什么不从第一个1开始 后面会说)

从第二个1开始 1010000 要比它小 应该将1置为0

即10_ _ _ _ 这样就是在之后的4个位置中选出 3-(2-1) 个1

(最多3个1 已经存在2个 将当前位置为0 那么-1)

再到第三个1的情况 101000 要比它小 应该将1置为0

即1010_ _ 这样就是在之后的2个位置中选出 3-(3-1)个1

从第一个1开始是不能将其置为0的 所以直接从第二个开始

#include <bits/stdc++.h>
#define ll long long
using namespace std; int bi[];
int getNum(int x) {
int c=;
while(x) {
bi[++c]=x&;
x >>= ;
}
return c;
}
ll C[][];
void init() {
C[][]=C[][]=C[][]=1LL;
for(int i=;i<=;i++) {
C[i][]=C[i][i]=1LL;
for(int j=;j<i;j++)
C[i][j]=C[i-][j-]+C[i-][j];
}
}
int main()
{
ll a,b;
init();
while(~scanf("%lld%lld",&a,&b)) {
ll ans=;
int L=getNum(a), c=; // 二进制位数
for(int i=L-;i>=;i--)
if(bi[i]) { c++;
for(int j=;j<=L/-(c-);j++)
ans-=C[i-][j]; /// 减去L位中比a小的
}
int R=getNum(b); c=;
for(int i=R-;i>=;i--)
if(bi[i]) { c++;
for(int j=;j<=R/-(c-);j++)
ans+=C[i-][j]; /// 加上R位中比b小的
} for(int i=L;i<R;i++) { /// 加上L位到R-1位的个数
for(int j=;j<i/;j++)
ans+=C[i-][j];
}
if(c<=R/) ans++; // 判断b是不是not round
// a不需要判断 因为包含在L位中 printf("%lld\n",ans);
} return ;
}

Round Numbers /// 组合计数 oj21455的更多相关文章

  1. [CodeForces 300C Beautiful Numbers]组合计数

    题意:十进制的每一位仅由a和b组成的数是“X数”,求长度为n,各数位上的数的和是X数的X数的个数 思路:由于总的位数为n,每一位只能是a或b,令a有p个,则b有(n-p)个,如果 a*p+b*(n-p ...

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

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

  3. POJ 3252 Round Numbers(组合)

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

  4. Round Numbers (排列组合)

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7558   Accepted: 2596 Description The c ...

  5. Round Numbers(组合数学)

    Round Numbers Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Tota ...

  6. 4-圆数Round Numbers(数位dp)

    Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14947   Accepted: 6023 De ...

  7. 【BZOJ】1662: [Usaco2006 Nov]Round Numbers 圆环数(数位dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1662 这道题折腾了我两天啊-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 果然 ...

  8. POJ 3252 Round Numbers 组合数学

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13381   Accepted: 5208 Description The ...

  9. poj3252 Round Numbers(数位dp)

    题目传送门 Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16439   Accepted: 6 ...

随机推荐

  1. __iomem作用

    最近在看网卡驱动时查看ioremap函数发现调用最低层用__iomem修饰了ioremap的第一个参数(unsigned int)ioremap(S3C24XX_PA_CS8900, SZ_1M) + ...

  2. 依赖Anaconda环境安装TensorFlow库,避免采坑

    TensorFlow™ 简介: TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示 ...

  3. Android Telephony分析(七) ---- 接口扩展(异步转同步)

    本文是基于上一篇<Android Telephony分析(六) —- 接口扩展(实践篇)>来写的.上一篇介绍的接口扩展的方法需要实现两部分代码:1. 从APP至RIL,发送请求:2. 从R ...

  4. 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷

    通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下:     步骤1:通过MyEclipse中的window->show View->ot ...

  5. webpack2诸类事宜

    写在最前:webpack的总结也是自己坑过,实践过但是也是针对性的使用,在加上webpack的背景,对于其‘原理’方面有很大的不正确的理解,有错误的地方,请尽情指出(乖巧~) 由于版本遇到的问题: 在 ...

  6. git提交遇到.suo文件无法提交的问题

    这个只是我个人遇到的一个问题小记 由于最近做的项目使用VS编辑器的,在用它集成创建的项目里,每次提交都会有个后缀名为.suo的文件在修改的文件列表里.这时直接进行提交会报错, 1.我将xx.suo/x ...

  7. js浮点数的计算总结

    在js浮点值的计算中,很多时候会出现不准确的情况,如下面的情况 console.log(2.2 + 2.1) // 4.300000000000001 console.log(2.2 - 1.9) / ...

  8. 不在B中的A的子串数量 HDU - 4416 (后缀自动机模板题目)

    题目: 给定一个字符串a,又给定一系列b字符串,求字符串a的子串不在b中出现的个数. 题解: 先将所有的查询串放入后缀自动机(每次将sam.last=1)(算出所有子串个数) 然后将母串放入后缀自动机 ...

  9. extern static和函数

    #include <stdio.h> int sum(int a, int b); int main() { /************************************** ...

  10. 上线出现[x86_64, i386]

    echo "Target architectures: $ARCHS" APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}&quo ...