poj 3252
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的更多相关文章
- POJ 3252 (数位DP)
###POJ 3252 题目链接 ### 题目大意:给你一段区间 [Start,Finish] ,在这段区间中有多少个数的二进制表示下,0 的个数 大于等于 1 的个数. 分析: 1.很显然是数位DP ...
- POJ 3252:Round Numbers
POJ 3252:Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10099 Accepted: 36 ...
- POJ 3252 Round Numbers(组合)
题目链接:http://poj.org/problem?id=3252 题意: 一个数的二进制表示中0的个数大于等于1的个数则称作Round Numbers.求区间[L,R]内的 Round Numb ...
- [poj 3252]数位dp前导0的处理
通过这个题对于数位dp中前导0的处理有了新的认识. 题目链接:http://poj.org/problem?id=3252 //http://poj.org/problem?id=3252 #incl ...
- 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 ...
- POJ 3252 Round Numbers
组合数学...(每做一题都是这么艰难) Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7607 A ...
- Greedy:Fence Repair(POJ 3252)
Fence Repair 问题大意:农夫约翰为了修理栅栏,要将一块很长的木块切割成N块,准备切成的木板的长度为L1,L2...LN,未切割前的木板的长度恰好为切割后木板的长度的总和,每次切断木板的时候 ...
- poj 3252 组合数
主要考察组合数知识,初始化的时候参考公式 首先先推个公式,就是长度为len的Round Numbers的个数. 长度为len,第一位肯定是1了. 那么后面剩下 len-1位 ...
- POJ 3252 Round Numbers(数位dp)
题意:给定区间[l,r],l < r ,求区间中满足条件的正整数的个数:二进制表示下0的个数不少于1的个数. 分析:f(x)表示<=x时满足条件的数的个数,所求问题即为f(r)-f(l-1 ...
随机推荐
- openstack windows 2008 img
1,制作镜像主机pre Env yum -y install qemu-img virt-install libvirt 2,配置bridge
- ubuntu apache fastcgi 虚拟主机安装
1 cp /etc/apache2/sites-available/default /etc/apache2/sites-available/www.domain.com 这里www.domain.c ...
- vs2010 项目编译 ResGen.exe”已退出,代码为 -1073741701
解决的办法如下: 1.关闭所有Visual Studio: 2.以管理员的身份打开命令提示窗口:(开始-运行-cmd) 3.更改目录至"CD C:\Program Files (x86)\M ...
- App引导页面源代码的实现
一.页面效果图
- Junit 测试常见错误
1. java.lang.Exception: No tests found matching Method deleteUser(mybatis.dao.Usertest) from org.jun ...
- java读取配置文件的几种方法
java读取配置文件的几种方法 原文地址:http://hbcui1984.iteye.com/blog/56496 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配 ...
- 一道试题引发的血案 int *ptr2=(int *)((int)a+1);
某日,看到一道比较恶心的C语言的试题,考了很多比较绕的知识点,嘴脸如下: int main(void) { int a[4] = {1, 2, 3, 4}; int *ptr1=(int *)(&am ...
- VC++ 编译过程
一 前言 一开始编译C++代码的时候可能会对编译的错误觉得很难理解,搞不清楚究竟是哪里错了.了解编译过程,能够更好的处理编译错误. 二 名词解释 编译单元:当一个c或cpp文件在编译时,预处理器首先递 ...
- windows hook (转)
http://blog.csdn.net/friendan/article/details/12226201 原文地址:http://blog.sina.com.cn/s/blog_628821950 ...
- [NewCoder]复杂链表的复制
看下面一个链表结点的定义: struct ComplexListNode { int val; struct ComplexListNode *next; struct ComplexListNode ...