1265. Round Numbers(rndnum.pas/c/cpp) 
(File IO): input:rndnum.in output:rndnum.out

Time Limits: 1000 ms  Memory Limits: 65536 KB  Detailed Limits  

Goto ProblemSet

Description

       正如你所知,奶牛们没有手指以至于不能玩“石头剪刀布”来任意地决定例如谁先挤奶的顺序。她们甚至也不能通过仍硬币的方式。
       所以她们通过"round number"竞赛的方式。第一头牛选取一个整数,小于20亿。第二头牛也这样选取一个整数。如果这两个数都是 "round numbers",那么第一头牛获胜,否则第二头牛获胜。
       如果一个正整数N的二进制表示中,0的个数大于或等于1的个数,那么N就被称为"round number" 。例如,整数9,二进制表示是1001,1001 有两个'0'和两个'1'; 因此,9是一个round number。26 的二进制表示是 11010 ; 由于它有2个'0'和3个'1',所以它不是round number。
       很明显,奶牛们会花费很大精力去转换进制,从而确定谁是胜者。 Bessie 想要作弊,而且认为只要她能够知道在一个指定区间范围内的"round numbers"个数。
       帮助她写一个程序,能够告诉她在一个闭区间中有多少Hround numbers。区间是[start, finish],包含这两个数。 (1 <= Start < Finish <= 2,000,000,000)

 

Input

  Line 1: 两个用空格分开的整数,分别表示Start 和 Finish。

Output

  Line 1: Start..Finish范围内round numbers的个数
 

Sample Input

2 12

Sample Output

6
 
做法:跑一边数位dp,设f[i][j]表示i位2进制数中有j个1的方案数,f[i][j] = f[i - 1][j - 1] + f[i - 1][j]; 然后统计答案;
 
代码如下:

 #include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int a, b;
int f[][], s[]; void pre_work()
{
f[][] = ;
for (int i = ; i <= ; i++)
f[i][] = ;
for (int i = ; i <= ; i++)
for (int j = ; j <= i; j++)
f[i][j] = f[i - ][j - ] + f[i - ][j];
} int work(int x)
{
if (!x) return ;
int m = , ans = , sum = ;
while (x)
{
s[++m] = x & ;
x >>= ;
}
for (int i = ; i < m; i++)
for (int j = ; j < i / ; j++)
ans += f[i - ][j];
for (int i = m - ; i; i--)
{
if (s[i])
{
for (int j = ; j <= m / - sum; j++)
ans += f[i - ][j];
}
sum += s[i];
}
ans += sum <= (m / );
return ans;
} int main()
{
freopen("rndnum.in", "r", stdin);
freopen("rndnum.out", "w", stdout);
scanf("%d%d", &a, &b);
pre_work();
cout << work(b) - work(a - );
}

最新文章

  1. BZOJ3434 [Wc2014]时空穿梭
  2. NuGet学习笔记2——使用图形化界面打包自己的类库
  3. [moka同学笔记]yii2.0数据库操作以及分页
  4. Javascript屏蔽回车提交表单
  5. 简单的将内容加入到drupal的主页面
  6. JavaScript实现命令行交互
  7. uboot下 Nand flash 启动 内核与根文件系统
  8. POJ 3083 Children of the Candy Corn bfs和dfs
  9. Hibernate validator验证
  10. What does the number on the visual studio solution icon represent?
  11. 95秀-弹窗+listview+动画 示例
  12. 我的django之旅(二)模板和静态文件
  13. 2015第15周日PostgreSQL学习
  14. 关于new enhancement的一些知识
  15. Java 基于ArcFace人脸识别2.0 服务端Demo
  16. 解决百度上传WebUploader在IE浏览器下点击无反应的问题
  17. JdbcTemplate的一次爬坑记录
  18. .Net 并发写入文件的多种方式
  19. 「2017 Multi-University Training Contest 1」2017多校训练1
  20. 关于C语言实现判断给定一个数,判断其是否是一个质数(素数)。

热门文章

  1. Storm概念学习系列之事务
  2. Storm概念学习系列之Tuple元组(数据载体)
  3. 【Java】在eclipse中使用maven进行项目构建 入门篇
  4. CXF 发布rest服务
  5. SpringBoot | 第十一章:Redis的集成和简单使用
  6. Java中的do-while循环——通过示例学习Java编程(11)
  7. Duplicate Emails
  8. Java并发基础:线程的创建
  9. 玩转spring ehcache 缓存框架
  10. concurrent.futures模块与协程