POJ 3252 Round Numbers(组合数学)
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 10223 | Accepted: 3726 |
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
Output
Sample Input
2 12
Sample Output
6
Source
题意:问在闭区间[n,m]中有多少个数是round numbers。所谓round numbers就是把闭区间中的某一个十进制的数字转换成二进制后0的个数大于等于1的个数,那么这个数就是round
numbers
<pre name="code" class="cpp">#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h> using namespace std; int c[33][33] = {0};
int bin[35];
int n,m; void updata() ///计算n个里面取m个的方法数
{
for(int i=0;i<=32;i++)
{
for(int j=0;j<=i;j++)
{
if(j == 0 || i == j)
{
c[i][j] = 1;
}
else
{
c[i][j] = c[i-1][j-1] + c[i-1][j];
}
}
}
} void upbin(int x) /// 将要求的数转化为二进制数而且逆序存储
{
bin[0] = 0;
while(x)
{
bin[++bin[0]] = x%2;
x = x / 2;
}
return ;
} int qurry(int x) ///计算0-n之间的Round Number的个数
{
int sum = 0;
upbin(x);
///求二进制长度小于len的全部二进制数中Round Number的个数
for(int i=1;i<bin[0]-1;i++)
{
for(int j=i/2+1;j<=i;j++)
{
sum += c[i][j];
}
}
int zero = 0;
///求二进制长度等于len的全部二进制数中Round Number的个数
for(int i=bin[0]-1;i>=1;i--)
{
if(bin[i]) ///当前位的值为1
{
for(int j=(bin[0]+1)/2-(zero+1);j<=i-1;j++) ///看懂这里即可了
{
sum += c[i-1][j];
}
}
else
{
zero++;
}
}
return sum;
} int main()
{
updata();
scanf("%d%d",&n,&m);
printf("%d\n",qurry(m+1)-qurry(n));
return 0;
}
POJ 3252 Round Numbers(组合数学)的更多相关文章
- POJ 3252 Round Numbers 组合数学
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13381 Accepted: 5208 Description The ...
- POJ 3252 Round Numbers(组合)
题目链接:http://poj.org/problem?id=3252 题意: 一个数的二进制表示中0的个数大于等于1的个数则称作Round Numbers.求区间[L,R]内的 Round Numb ...
- POJ 3252 Round Numbers
组合数学...(每做一题都是这么艰难) Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7607 A ...
- POJ 3252 Round Numbers 数学题解
Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, P ...
- [ACM] POJ 3252 Round Numbers (的范围内的二元0数大于或等于1数的数目,组合)
Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8590 Accepted: 3003 Des ...
- poj 3252 Round Numbers(数位dp 处理前导零)
Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, P ...
- POJ 3252 Round Numbers(数位dp&记忆化搜索)
题目链接:[kuangbin带你飞]专题十五 数位DP E - Round Numbers 题意 给定区间.求转化为二进制后当中0比1多或相等的数字的个数. 思路 将数字转化为二进制进行数位dp,由于 ...
- POJ - 3252 - Round Numbers(数位DP)
链接: https://vjudge.net/problem/POJ-3252 题意: The cows, as you know, have no fingers or thumbs and thu ...
- 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 ...
随机推荐
- 用typename和template消除歧义
- 《Java并发编程实战》第五章 同步容器类 读书笔记
一.同步容器类 1. 同步容器类的问题 线程容器类都是线程安全的.可是当在其上进行符合操作则须要而外加锁保护其安全性. 常见符合操作包括: . 迭代 . 跳转(依据指定顺序找到当前元素的下一个元素) ...
- Linux下无需输入password自己主动登陆sshserver方法
用OpenSSH在linux下登陆sshserver时.每次都提示要输入password,并且使用vim 的netrw插件编辑远程文件时每次改动后保存都要输password,很麻烦. 查看了netrw ...
- .Net 安装aliyun-oss
NuGet安装 如果您的Visual Studio没有安装NuGet,请先安装 NuGet. 安装好NuGet后,先在Visual Studio中新建或者打开已有的项目,然后选择工具 > NuG ...
- BZOJ 1306 DFS
思路: 搜索就好 (注意不要枚举太多东西) //By SiriusRen #include <cstdio> using namespace std; int n,point[10],an ...
- Introspector
import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; im ...
- element-ui表格控件前端分页方法
<div id="app"> <el-table :data="tableData.slice((currentPage-1)*pageSize,cur ...
- 现实人脸识别性别之路----弄清楚train_test_split函数
'''train_test_split(trian_data,trian_target,test_size,random_state)各个参数表示的意义:trian_data表示被划分的样本特征集tr ...
- 【Linux下权限控制之chmod与chown命令】
chmod 用于配置文件/目录权限 命名格式:chmod [选项] 文件/目录名 . 权限类别: r 读取 可用数字4表示 w 写入 可用数字2表示 x 执行 可用数字1表示 . 归属类别: u 属主 ...
- 重新安装python2.6 和 yum (不可以直接安装yum yum 依赖于python2.6)
(升级或卸载Python导致 yum出错) 一: 升级python导致yum出错 1. cd /usr/bin/yum 2. #!/usr/bin/python 修改为 #!/usr/bin ...