题目链接:http://poj.org/problem?id=3252

题意:给定s、e,求[s,e]之间的Round Number的个数,RN数为二进制表示中0的个数大于1的个数的数,s、e<=2e9。

思路:计算[s,e]之间的RN数等价于getn(e+1)-getn(s),getn(s)表示[0,s)之间的RN数,注意RN数要求是正数,所以0不算,但其实算不算结果都一样。需要用到组合数,初始化组合数,用公式C(n,m)=C(n-1,m-1)+C(n-1,m)递推实现,用sum[i]表示长度为i的数中RN数的个数。用bit数组存储x的各个位的值,len表示其长度。则小于x的RN数分两种情况,一种长度小于len的,此情况的数恒小于x,但要注意的是数的第一位必须是1。长度小于len的情况比较简单,只需要把预处理的sum数组相加即可; 等于len的情况,从第二位开始讨论,一直到第len位,若为1,则通过组合数计算出这一位取0时有多少个RN数并加上,若为1,则跳过。

AC代码:

 #include<cstdio>
using namespace std; int s,e;
int C[][],sum[]; void init(){
C[][]=;
for(int i=;i<=;++i)
C[i][]=C[i][i]=;
for(int i=;i<=;++i)
for(int j=;j<=i-;++j)
C[i][j]=C[i-][j-]+C[i-][j];
for(int i=;i<=;++i)
for(int j=(i+)>>;j<=i-;++j)
sum[i]+=C[i-][j];
} int getn(int x){
if(x<=) return ;
int ans=,len=,num0=,num1=,bit[];
while(x){
bit[len++]=x%;
x/=;
}
for(int i=;i<len;++i)
ans+=sum[i];
for(int i=len-;i>=;--i)
if(bit[i]){
for(int j=i;j>=&&j+num0+>=num1+i-j;--j)
ans+=C[i][j];
++num1;
}
else
++num0;
return ans;
} int main(){
init();
scanf("%d%d",&s,&e);
printf("%d\n",getn(e+)-getn(s));
return ;
}

poj3252(组合数)的更多相关文章

  1. [BZOJ1662][POJ3252]Round Numbers

    [POJ3252]Round Numbers 试题描述 The cows, as you know, have no fingers or thumbs and thus are unable to ...

  2. [poj3252]Round Numbers_数位dp

    Round Numbers poj3252 题目大意:求一段区间内Round Numbers的个数. 注释:如果一个数的二进制表示中0的个数不少于1的个数,我们就说这个数是Round Number.给 ...

  3. poj3252(数位dp)(模板)

    题目链接:https://vjudge.net/problem/POJ-3252 题意:求[l,r]之间的Round Number数,RN数即化为二进制后0的个数不少于1的个数的数. 思路:之前用组合 ...

  4. LCM性质 + 组合数 - HDU 5407 CRB and Candies

    CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...

  5. 计算一维组合数的java实现

    背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...

  6. Noip2016提高组 组合数问题problem

    Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...

  7. C++单元测试 之 gtest -- 组合数计算.

    本文将介绍如何使用gtest进行单元测试. gtest是google单元测试框架.使用非常方便. 首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用. ...

  8. NOIP2011多项式系数[快速幂|组合数|逆元]

    题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...

  9. AC日记——组合数问题 落谷 P2822 noip2016day2T1

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

随机推荐

  1. Oracle掌管权限和角色

    转自:https://blog.csdn.net/without_bont/article/details/79862112 掌管权限和角色 这一部分我们主要看oracle中如何管理权限和角色,权限和 ...

  2. leetcode 题解 word search。递归可以更简洁。

    先写上我的代码: 我总是不知道何时把任务交给下一个递归.以致于,写出的代码很臃肿! 放上别人递归的简洁代码: bool exist(char** board, int m, int n, char* ...

  3. ACM__搜素之BFS与DFS

    BFS(Breadth_First_Search) DFS(Depth_First_Search) 拿图来说 BFS过程,以1为根节点,1与2,3相连,找到了2,3,继续搜2,2与4,相连,找到了4, ...

  4. Servlet基本_サーブレットのライフサイクル、スレッドセーフ

    1.サーブレットのライフサイクル初期化時 ⇒ init() [初回リクエスト時] ↓リクエスト時 ⇒service() ⇒doGet() [Httpリクエストメソッドにより振り分け] 或は⇒doPos ...

  5. [linux]如何更新Ubuntu的数据源

    为何要更新数据源?国外的数据源,除了速度慢这个次要因素,更可怕的是有些链接根本不通,导致用户既没有下载东西,也没有看到实质性提示:潜在的危险就是编译错误不能定位,严重时甚至重装系统.本文介绍几个国内有 ...

  6. Linux下使用命令行配置IPMI

    ipmitool是什么: 百度百科给的解释已经够用了,简单说就是“IPMI(Intelligent Platform Management Interface)即智能平台管理接口是使硬件管理具备“智能 ...

  7. Intellij IDEA使用spring-boot-devtools无效解决办法(2018年3月9日11:46:00)

    步骤一:pom.xml中加入: <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  8. java Overloaded的方法是否可以改变返回值的类型?

    刚才看到这样一个题,下面的解释很乱,所以还是做一下试验比较好 public class Test { public static void main(String[] args){ Bae b = n ...

  9. JAVAWEB 一一 Spirng(AOP面向切面)

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <!-- < ...

  10. 学JS的心路历程-闭包closure

    闭包是是纯函式语言的一个特性,也是JS的一个关键性的特色,虽然不了解也能开发程序,但我们不是这种人对吧? 闭包不仅可以减少某些高阶功能的代码数量和复杂度,并且可以让我们做到原本无法做的复杂功能.听到这 ...