http://poj.org/problem?id=3252
//自己搞了很长时间。。。现在刚刚有点明白。。
1 #include <iostream> using namespace std;
long long c[][];
void init(){
for(int i=;i<;i++){//初始化组合数利用的是公式
c[i][] = c[i][i] = ;
for(int j=;j<i;j++)
c[i][j] = c[i-][j]+c[i-][j-];//公式
}
}
int mx(int a,int b){
if(a>b)
return a;
return b;
}
long long solve(long long n){
int len=;
int bit[];
while(n){//得到二进制数1--len
bit[++len] = n%;
n = n/;
}
long long sum = ;
for(int i=;i<len;i++){//当长度小于len时
for(int j=(i+)/;j<i;j++)
sum += c[i-][j];
}
//长度等于len时
int one = ;
int zero =;
for(int i=len-;i;i--){
if(bit[i]){//如果在这一位是1则将其其改为0,那么得到的数一定比原来的数小,再枚举。。
zero ++;//改为0后。。0的数目加1,一的数目不变
for(int j = mx(,(len+)/-zero);j<i;j++)
sum += c[i-][j];
zero--;//用完后改归来,0的数目-1,1的数目+1;
one++;
}
else //这一位是0, 那么就将0的数目加1
zero++;
}
return sum;
}
int main()
{
init();
long long a,b;
while(cin>>a>>b){ //[a,b]=[0,b+1)-[0,a),所以此处就应该应该这么写
cout<<solve(b+)-solve(a)<<endl;
}
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 Round Numbers(组合)

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

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

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

  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 Round Numbers

     组合数学...(每做一题都是这么艰难) Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7607 A ...

  7. Greedy:Fence Repair(POJ 3252)

    Fence Repair 问题大意:农夫约翰为了修理栅栏,要将一块很长的木块切割成N块,准备切成的木板的长度为L1,L2...LN,未切割前的木板的长度恰好为切割后木板的长度的总和,每次切断木板的时候 ...

  8. poj 3252 组合数

        主要考察组合数知识,初始化的时候参考公式 首先先推个公式,就是长度为len的Round Numbers的个数.      长度为len,第一位肯定是1了.      那么后面剩下 len-1位 ...

  9. POJ 3252 Round Numbers(数位dp)

    题意:给定区间[l,r],l < r ,求区间中满足条件的正整数的个数:二进制表示下0的个数不少于1的个数. 分析:f(x)表示<=x时满足条件的数的个数,所求问题即为f(r)-f(l-1 ...

随机推荐

  1. rsyslog 日志归类思路--根据syslog local5 nginx-zjzc01;

    Aug 5 16:36:12 jrhwpt01 nginx-zjzc01: www.zjcap.cn 10.252.105.157 10.171.246.184 [05/Aug/2016:16:36: ...

  2. 打造自己博客(wordpress)的wap手机版本

    这儿介绍我试用的两款插件:wordpress-mobile-edition和wp-t-wap.1.先说一下两者的区别. wordpress-mobile-edition插件使用后,可以用手机直接访问你 ...

  3. Java图形化界面设计——容器(JFrame)

    Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构 ...

  4. Apache Maven-AntRun-Plugin 官网 bug

    Maven AntRun Plugin 今天在 Apache maven-antrun-plugin 官网查找资料时,竟然发现了一个bug!! 在此记录下,以免在同一个地方摔倒两次! 想起一句话,尽信 ...

  5. svn中的Trunk,branches,tags深度理解

    trunk.就是主干,这个目录以下直接放源代码了,我们创建项目的时候,把项目源代码放到这个目录.import进svn branches.就是分支,以下可能有非常多trunk,比方trunk_1_0_1 ...

  6. python生成器之斐波切纳数列

    面试的时候遇到过这样的一个题目: 斐波切纳数列1,2,3,5,8,13,21.........根据这样的规律,编程求出400万以内最大的斐波切纳数,并求出是第几个斐波切纳数. 方法一: 方法二:这个方 ...

  7. C++ 字符串分割,分割到vector中

    #include <string> #include <vector> using std::string; using std::vector; int splitStrin ...

  8. C++的常量折叠(一)

    前言 前几天女票问了我一个阿里的面试题,是有关C++语言的const常量的,其实她一提出来我就知道考察的点了:肯定是const常量的内存不是分配在read-only的存储区的,const常量的内存分配 ...

  9. Spring学习之注入方式

    我们知道,Spring对象属性的注入方式有两种:设值注入和构造注入. 假设有个类为People,该对象包含三个属性,name和school还有age,这些属性都有各自的setter和getter方法, ...

  10. HDU2008-数值统计

    描述: 统计给定的n个实数中,负数.零和正数的个数. 代码: #include<stdio.h> #include<string.h> #include<iostream ...