POJ 3252:Round Numbers

Time Limit: 2000MS

Memory Limit: 65536K

Total Submissions: 10099

Accepted: 3669

Description

The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone’ (also known as ‘Rock, Paper, Scissors’, ‘Ro, Sham, Bo’, and a host of other names) in order to make arbitrary decisions such as who gets to be milked first. They can’t even flip a coin because it’s so hard to toss using hooves.

They have thus resorted to “round number” matching. The first cow picks an integer less than two billion. The second cow does the same. If the numbers are both “round numbers”, the first cow wins,

otherwise the second cow wins.

A positive integer N is said to be a “round number” if the binary representation of N has as many or more zeroes than it has ones. For example, the integer 9, when written in binary form, is 1001. 1001 has two zeroes and two ones; thus, 9 is a round number. The integer 26 is 11010 in binary; since it has two zeroes and three ones, it is not a round number.

Obviously, it takes cows a while to convert numbers to binary, so the winner takes a while to determine. Bessie wants to cheat and thinks she can do that if she knows how many “round numbers” are in a given range.

Help her by writing a program that tells how many round numbers appear in the inclusive range given by the input (1 ≤ Start < Finish ≤ 2,000,000,000).

Input

Line 1: Two space-separated integers, respectively Start and Finish.

Output

Line 1: A single integer that is the count of round numbers in the inclusive range Start..Finish

Sample Input

2 12

Sample Output

6

题目给了一个区间,要求的是这个区间之内有多少个数,这种数满足转为二进制时0的数量大于等于1的数量。

也是头一次接触数位DP,捡起了很久没有用的C[j][i] = C[j-1][i-1] + C[j-1][i]。这个高中时做排列组合题目时会用到的公式。

求[start,finnish]这个区间之内有多少数符合条件,这样做比较麻烦,因为要考虑到start与finnish的各种情况,不如求0到start有多少个符合条件的数,求0到finnish+1有多少符合条件的数,之后两者相减即是结果。

所以这样就归结为求从0到n,符合条件的数的数量。

首先求转成二进制之后,位数本身就小于n的数量。这个求的时候很简单,满足0大于等于一般即可。

之后是位数相等的,由于n第一位一定是1,所以从左至右看0的数量,如果面对的是1,那么假设其是0。(因为此时,假设是0之后后面所有求出符合条件的数都是小于n的,所以符合题意。)求后面满足0的数量占整个数量一半以上的有多少个,不断相加。如果是0,则0的数量++即可。

代码:

#include <iostream>
using namespace std; int c[33][33];
int bin[35]; void init()
{
int i,j;
memset(c,0,sizeof(c)); for(i=0;i<=32;i++)
{
for(j=0;j<=i;j++)
{
if(j==0||j==i)
c[i][j]=1;
else
c[i][j]=c[i-1][j-1]+c[i-1][j];
}
}
} void dec_to_bin(int x)
{
memset(bin,0,sizeof(bin));
while(x!=0)
{
bin[++bin[0]]=x&1;
x=x>>1;
}
} int result(int x)
{
dec_to_bin(x); int i,j;
int sum=0; for(i=0;i<bin[0]-1;i++)
{
for(j=i/2+1;j<=i;j++)
{
sum +=c[i][j];
}
} int zero=0; for(i=bin[0]-1;i>=1;i--)
{
if(bin[i])
{
for(j=(bin[0]+1)/2-(zero+1);j<=i-1;j++)
sum += c[i-1][j];
}
else
zero++;
}
return sum;
}
int main()
{
init();
int a,b;
cin>>a>>b; cout<<result(b+1)-result(a)<<endl; return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ 3252:Round Numbers的更多相关文章

  1. POJ - 3252 A - Round Numbers

    The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' ...

  2. POJ 1320:Street Numbers

    Street Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2753   Accepted: 1530 De ...

  3. POJ 1142:Smith Numbers(分解质因数)

                                   Smith Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submiss ...

  4. POJ 3252 Round Numbers(组合)

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

  5. [ACM] POJ 3252 Round Numbers (的范围内的二元0数大于或等于1数的数目,组合)

    Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8590   Accepted: 3003 Des ...

  6. POJ 3252 Round Numbers(组合数学)

    Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10223   Accepted: 3726 De ...

  7. POJ 3252 Round Numbers(数位dp&amp;记忆化搜索)

    题目链接:[kuangbin带你飞]专题十五 数位DP E - Round Numbers 题意 给定区间.求转化为二进制后当中0比1多或相等的数字的个数. 思路 将数字转化为二进制进行数位dp,由于 ...

  8. POJ - 3252 - Round Numbers(数位DP)

    链接: https://vjudge.net/problem/POJ-3252 题意: The cows, as you know, have no fingers or thumbs and thu ...

  9. POJ 3252 Round Numbers

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

随机推荐

  1. webpack的配置文件[webpack.config.js]

    如果项目里没有webpack.config.js这个文件,webpack会使用它本身内置在源码里的配置项. webpack.config.js这个配置名称可以通过指令修改 npx webpack -- ...

  2. 9.ActiveMQ

    1. ActiveMQ 安装 下载并安装ActiveMQ服务器端(1.1):从http://activemq.apache.org/download.html下载最新的ActiveMQ(1.2):直接 ...

  3. [Linux] day02——什么是Linux

    什么是linux? 一种操作系统计算机 = 硬件 +软件系统软件 = 内核 + 驱动应用软件 编程 上网 linux系统构成linux内核基本库 应用程序-------------------常见的操 ...

  4. Ideone:在线多语言编程执行器工具

    Ideone:在线多语言编程执行器工具此网站提供40种编程语言以上, 能在线直接做编译和执行的动作,该工具是一款简易的编程测试工具,虽然不能替代专业版的工具,但是其功能非常全面. Ideone,一款在 ...

  5. 分析一次double强转float的翻车原因(转载)

    https://www.cnblogs.com/CoderAyu/p/11489577.html float只能保证7位有效数字. double d = 8345933; float f = (flo ...

  6. python 网络爬虫(三)

    一.网站地图爬虫 在一个简单的爬虫中,我们将使用实例网站 robots.txt 文件中发现的网站地图来下载所有网站,为了解析网站地图,我们将会使用一个简单的正则表达式,从<loc>标签中提 ...

  7. Python用户界面编程PyQt5的四种的布局方式

    1.QT是C++编写的跨平台GUI库,GUI是指桌面程序应用. 2.开发基于pyqt5的桌面应用程序必须要使用两个类Qapplication和Qwidget类,都在PyQt5.Qt.widgets里面 ...

  8. 解决vue更新默认值时出现的闪屏问题

    在Vue项目中,对于一个展示用户个人信息的页面.有以下需求,需要判断用户个人信息是否填充过,如果填充过,需要在页面中展示已填充项(未填充项不展示):如果未填充过,需要在页面中显示另外一种元素(提示用“ ...

  9. HTML的几个注意点

    一.HTML 1.HTML5有哪些新特性?新增的标签有哪些? 新特性: 语义标签——语义化标签使得页面的内容结构化,见名知义 增强型表单——拥有多个新的表单 Input 输入类型.这些新特性提供了更好 ...

  10. 有关vector元素的取地址

    1--原则上,最好不要对vector的元素取地址,除非所有的vector元素已经填充完毕,这样vector的元素不会发生位置移动,地址才不会变,这样才能确保取得的地址的有效性.PS:即使在可以用已经分 ...