POJ 3252 Round Numbers(组合数学)
来源:互联网 发布:千万别去淘宝搜 编辑:程序博客网 时间:2024/04/30 11:36
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 (组合数学)
- POJ 3252 Round Numbers(组合数学)
- POJ 3252 Round Numbers (组合数学)
- poj 3252 Round Numbers 组合数学
- poj 3252 Round Numbers 组合数学
- POJ 3252 Round Numbers 组合数学
- [poj 3252] Round Numbers 组合数学
- poj 3252Round Numbers(组合数学)
- POJ Round Numbers 3252 (组合数学)
- POJ 3252 Round Numbers 组合数学
- 组合数学 POJ 3252 Round Numbers
- POJ 3552Round Numbers(组合数学)
- POJ 题目3252 Round Numbers(组合数学)
- POJ-Round Numbers-组合数学
- poj 3252 Round Numbers 数位DP or 组合数学
- POJ-3252-Round Numbers-组合数学-递推
- POJ 3252 Round Numbers (组合数学/数位dp)
- 关于数组与指针的一个面试题
- Android 如何在进入有scrollView的页面时滑动条置顶
- sourcetree使用教程 分支 git flow
- PHPStorm 配置自定义的Apache与PHP解释器
- 一张图告诉你是需要 SQL 还是 Hadoop
- POJ 3252 Round Numbers(组合数学)
- Circular Sequence
- 一个页面两个windon.onload的解决办法
- Mac os快捷键(1)
- 二维码的生成
- SQL Sever的MSSQLSERVER协议无法启动
- OC学习笔记之多态
- SpringMVC注解-org.springframework.web.bind.annotation
- java中的反射 2.1——类:获取类对象@译自Oracle官方文档