poj3252(组合数)
题目链接: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(组合数)的更多相关文章
- [BZOJ1662][POJ3252]Round Numbers
[POJ3252]Round Numbers 试题描述 The cows, as you know, have no fingers or thumbs and thus are unable to ...
- [poj3252]Round Numbers_数位dp
Round Numbers poj3252 题目大意:求一段区间内Round Numbers的个数. 注释:如果一个数的二进制表示中0的个数不少于1的个数,我们就说这个数是Round Number.给 ...
- poj3252(数位dp)(模板)
题目链接:https://vjudge.net/problem/POJ-3252 题意:求[l,r]之间的Round Number数,RN数即化为二进制后0的个数不少于1的个数的数. 思路:之前用组合 ...
- 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 ...
- 计算一维组合数的java实现
背景很简单,就是从给定的m个不同的元素中选出n个,输出所有的组合情况! 例如:从1到m的自然数中,选择n(n<=m)个数,有多少种选择的组合,将其输出! 本方案的代码实现逻辑是比较成熟的方案: ...
- Noip2016提高组 组合数问题problem
Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...
- C++单元测试 之 gtest -- 组合数计算.
本文将介绍如何使用gtest进行单元测试. gtest是google单元测试框架.使用非常方便. 首先,下载gtest (有些google项目包含gtest,如 protobuf),复制目录即可使用. ...
- NOIP2011多项式系数[快速幂|组合数|逆元]
题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...
- AC日记——组合数问题 落谷 P2822 noip2016day2T1
题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...
随机推荐
- python 生成器 的send
>>> def f(): c=yield 5 print c d=yield c+5 print d >>> b=f() >>> b.send(N ...
- HTML5 Canvas 小例子 伸缩旋转方块
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Activity工作流学习(二)--Activity数据库
23张表 ACT_RE_资源库流程规划表 act_re_deployment 部署信息表 act_re_model 流程设计模型部署表 act_re_procdef 流程定义数据表 ACT_RU_运行 ...
- crontab 安装与配置
安装方法: yum -y install vixie-cron yum -y install crontabs 说明:vixie-cron 软件包是 cron 的主程序:crontabs 软件包是用来 ...
- 爬虫--Scrapy-持久化存储操作2
1.管道的高级操作 将爬取到的数据值分别存储到本地磁盘.redis数据库.mysql数据. 需求:将爬取到的数据值分别存储到本地磁盘.redis数据库.mysql数据. 1.需要在管道文件中编写对应平 ...
- DotNet菜鸟入门之无限极分类(一)设计篇
写这个教程的原因,是因为,无限极分类,在许多项目中,都用得到.而对于新手来说,不是很好理解,同时,操作上也有一些误区或者不当之处.所以我就斗胆,抛砖引玉一下,已一个常见的后台左侧频道树为例子,讲解一下 ...
- Indy 10.5.8 for Delphi and Lazarus 修改版(2011)
Indy 10.5.8 for Delphi and Lazarus 修改版(2011) Internet Direct(Indy)是一组开放源代码的Internet组件,涵盖了几乎所有流行的I ...
- python中函数基础
函数 什么是函数? 函数分为内置函数和自定义函数 定义:在程序中具备某一功能的工具.在使用之前需准备该工具(函数的定义),遇到应用场景拿来就用(后引用). 为什么要用函数? 1.代码冗余 程序组织结构 ...
- 3.SLB 回话保持功能分析
参考文档: 七层会话保持 配置服务器Cookie会话保持常见问题四层监听
- unity "[ ]"标签
[CanEditMultipleObjects]//可多对象编辑 public class Collider2DEditor:Editor {} [SerializeField]//序列化私有属性 p ...