poj 3252 组合数
#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 组合数的更多相关文章
- 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
http://poj.org/problem?id=3252//自己搞了很长时间...现在刚刚有点明白.. 1 #include <iostream> using namespace st ...
- POJ 3252 Round Numbers(组合)
题目链接:http://poj.org/problem?id=3252 题意: 一个数的二进制表示中0的个数大于等于1的个数则称作Round Numbers.求区间[L,R]内的 Round Numb ...
- 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]数位dp前导0的处理
通过这个题对于数位dp中前导0的处理有了新的认识. 题目链接:http://poj.org/problem?id=3252 //http://poj.org/problem?id=3252 #incl ...
- [ACM] POJ 3252 Round Numbers (的范围内的二元0数大于或等于1数的数目,组合)
Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8590 Accepted: 3003 Des ...
- Round Numbers(poj 3252)
题意:算出区间内二进制中0的个数大于等于1的个数的数字有多少个 /* 本来以为用数位DP搞,但是组合数更简单. 我们设n的二进制长度为len. ①:先考虑长度小于len的数字. 这里以数字22为例,二 ...
- POJ - 3252 A - Round Numbers
The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' ...
随机推荐
- Unity Shader Billboard
记录来源于ShaderLab开发实战详解 Shader "Tut/Project/Billboard_1" { Properties { _MainTex ("Base ...
- Iterator&Vector应用实例
public class test1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-gene ...
- C函数tolower,与toupper
tolower 将大写转换成小写. 非字母字符不做出处理. 这个函数用法有点特殊他是处理字符的,而不是处理字符串的. 所谓的不能处理字符串不是说他不能处理字符串,他处理的时候对字符串必须是 ...
- glibc 简介:
glibc 编辑 glibc是GNU发布的libc库,即c运行库.glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc.glibc除了封装linux操作系统所提供的系统服 ...
- ExtJS学习之路第一步:对比jQuery,认识ExtJS
最近纷杂的事情比较多了,奔波ing!所以,Node.js 和Canvas动画系列都停止了,等稳定了再重拾书本继续学习!因为某种原因最近在看ExtJS,分享下学习的心得,希望对同道中人有所帮助. 第一用 ...
- jQuery类库的设计
目前为止,jquery是js社区中最活跃.用户最多的前端类库,具有链式操作.兼容性.基于数组的操作.强大的插件机制等特点,也是很多前端入门同学最早接触到的库.但是内部如何实现的,一直吸引着我.因此最近 ...
- 表单元素的写法及与后台php的交互
1.<select class="textEnaSty" name="Port" size="1" onchange="Ob ...
- 对大一新生开始学习C语言课程谈几点看法
大家好,首先祝贺大家进入了大学,迈入了大学的校门,也意味着开始了新的征程,希望大家能够有一个美好的大学四年. 先做下自我介绍,我叫李帅阳,(大家可以称呼我 李老师,或是班助,或是...)这是在邹欣老师 ...
- Maven使用常见问题整理
Maven使用常见问题整理 1.更新eclipse的classpath加入新依赖 1.在dependencyManagement里面加入包括版本在内的依赖信息,如: <dependenc ...
- HTML快速入门3
四.表格 (Table) 1. 表格的基本形式 表由 <table> 开始, </table> 结束,表的内容由 <tr>,<th> 和 <td& ...