Round Numbers(poj 3252)
题意:算出区间内二进制中0的个数大于等于1的个数的数字有多少个
/*
本来以为用数位DP搞,但是组合数更简单。
我们设n的二进制长度为len。
①:先考虑长度小于len的数字。
这里以数字22为例,二进制拆成10110,len=5。
len=1时,只能是1(题目要求是正数);
len=2时,第一位是1,剩下的1位,至少有1个0,ans+=C(1,1);
……
len=k时,第一位是1,剩下的len-k位,如果至少要有p个0,那么ans+=C(len-k,p)+...+C(len-k,len-k)。
②:再考虑长度等于len的数字。
第一位是1。
第二位是0,所以第二位不能为1,必须是0。
第三位为0的话,后面两位可以有1个0,2个0,ans+=C(2,1)+C(2,2)。
接下来把第三位恢复为1,看第四位。假如第四位是0,后面一位必须是0,ans+=C(1,1)。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 51
#define lon long long
using namespace std;
int c[N][N];
void getc(){
for(int i=;i<N;i++)
for(int j=;j<=i;j++){
if(j==||i==j) c[i][j]=;
else c[i][j]=c[i-][j]+c[i-][j-];
}
}
lon solve(lon n){
if(n==) return ;
lon ans=;
int a[N]={},len=;
while(n){
a[++len]=n%;
n>>=;
}
reverse(a+,a+len+);
for(int i=;i<len;i++)
for(int j=(i-)/+;j<i;j++)
ans+=(lon)c[i-][j];
int p0=,p1=;
for(int i=;i<len;i++){
if(!a[i]) {p0++;continue;}
for(int j=len-i;*j+p0+>=p1+len-i;j--)
ans+=(lon)c[len-i][j];
p1++;
}
if(a[len]&&p0+>=p1) ans++;
return ans;
}
int main(){
getc();
lon a,b;
cin>>a>>b;
cout<<solve(b+)-solve(a);
return ;
}
Round Numbers(poj 3252)的更多相关文章
- Round Numbers (排列组合)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7558 Accepted: 2596 Description The c ...
- poj3252 Round Numbers(数位dp)
题目传送门 Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16439 Accepted: 6 ...
- POJ 3252 Round Numbers(数位dp)
题意:给定区间[l,r],l < r ,求区间中满足条件的正整数的个数:二进制表示下0的个数不少于1的个数. 分析:f(x)表示<=x时满足条件的数的个数,所求问题即为f(r)-f(l-1 ...
- Greedy:Fence Repair(POJ 3252)
Fence Repair 问题大意:农夫约翰为了修理栅栏,要将一块很长的木块切割成N块,准备切成的木板的长度为L1,L2...LN,未切割前的木板的长度恰好为切割后木板的长度的总和,每次切断木板的时候 ...
- 1120 Friend Numbers (20 分)
1120 Friend Numbers (20 分) Two integers are called "friend numbers" if they share the same ...
- pat 1100 Mars Numbers(20 分)
1100 Mars Numbers(20 分) People on Mars count their numbers with base 13: Zero on Earth is called &qu ...
- pat 1069 The Black Hole of Numbers(20 分)
1069 The Black Hole of Numbers(20 分) For any 4-digit integer except the ones with all the digits bei ...
- pat 1023 Have Fun with Numbers(20 分)
1023 Have Fun with Numbers(20 分) Notice that the number 123456789 is a 9-digit number consisting exa ...
- pat 1120 Friend Numbers(20 分)
1120 Friend Numbers(20 分) Two integers are called "friend numbers" if they share the same ...
随机推荐
- HDU 5900
QSC and Master Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- hdu_5723_Abandoned country(最小生成树)
题目链接:hdu_5723_Abandoned country 题意: 让你求最小生成树的花费,然后求任给两点的期望路程 题解: 最小生成树大家都会求,Kruskal这里要改改,因为后面要求任意两点的 ...
- jquery 延迟执行实例介绍
代码如下: $(function(){ var $inputs = $('input[type=button]') .delay(500) .queue(function(){$(this).hide ...
- alt+shift+j,添加日期、作者等
在preference->Java->codestyle->codetemplates->commnets->type 可以编辑如: /** * @author ${us ...
- Android--->activity高级运用,保存前一个界面为完成的数据savedInstanceState。
main.xml布局代码分析 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...
- 【hihoCoder 第133周】2-SAT·hihoCoder音乐节
http://hihocoder.com/contest/hiho133/problem/1 2-sat模板...详细的题解请看题目里的提示. tarjan模板打错again致命伤qwq #inclu ...
- 关于源码编译每次提示有错误 要make update-api
最近编译newline的版本的时候..同事修改了andoid默认输入法为百度.这是系统自动提供的API,所以每次编译会提示 此时在编译源码生成SDK的过程中会出现这个问题:************** ...
- 配置 php-fpm 监听的socket
一般现在我们配置的PHP的web环境,如LNMP(linux+Nginx+Mysql+PHP), 这里linux可能是centos, ubuntu..., 数据库可能是mysql, postgresq ...
- 水熊虫 - Nature Communication
想发好文章?先看好文献! 生物信息分析类的文章都有着比较明显的套路,如果你深刻的掌握了这些套路,相信有一天你也能发Nature(子刊). Extremotolerant tardigrade geno ...
- php登录
if ($name && $passowrd){ $sql = "SELECT * FROM liuyanban WHERE name = '$name' and passw ...