题目描述

奶牛因为没有手指或拇指,无法玩剪刀石头布的游戏,所以在谁先挤牛奶这种事情上很难做出决定。他们甚至不能掷硬币,因为它们很难用蹄子扔硬币。于是奶牛们发明了一种“round number”,第一头母牛出一个小于等于2,000,000,000的数,第二头牛也一样。如果数字都是“round number”,则第一头母牛获胜,否则,第二头牛获胜。如果N的二进制表示形式0的个数大于等于1的个数,则将正整数N称为“round number”。例如,整数9以二进制形式编写时为1001。1001具有两个零和两个1;因此,9是一个“round number”。整数26是二进制的11010;由于它有两个0和3个1,所以它不是一个“round number”。显然,母牛要花一些时间才能将数字转换为二进制,因此获胜者需要一段时间才能确定谁赢谁输。小可想提前知道给定范围内有多少个“round number”你能通过编写一个程序来帮助她吗?该程序告诉小可在输入给定的范围(1≤开始<完成≤2,000,000,000)中出现了多少个“round number ”。

输入描述

输入一行,两个以空格分隔的整数,分别为x和y。

输出描述

输出一行,一个整数,表示x~y范围(包括xy在内)中的 “ round number ” 个数。

样例

输入

2 12

输出

6

这是一个数位问题,先将数数位分离成二进制,在套用数位模板,要注意前导零!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long
const int N=35;
int num[N],dp[N][3][3][N][N];
int dfs(int lct,bool li,bool p0,int cnt0,int cnt1){if(lct==0){if(cnt0>=cnt1) return 1;else return 0;}if(dp[lct][li][p0][cnt0][cnt1]!=-1) return dp[lct][li][p0][cnt0][cnt1];int top=li?num[lct]:1;int ans=0;for(int i=0;i<=top;i++){if(i==0){if(p0==1) ans+=dfs(lct-1,li&&(i==num[lct]),1,cnt0,cnt1);else ans+=dfs(lct-1,li&&(i==num[lct]),0,cnt0+1,cnt1);} else ans+=dfs(lct-1,li&&(i==num[lct]),0,cnt0,cnt1+1);}return dp[lct][li][p0][cnt0][cnt1]=ans;
}
int sol(int x){int lct=0;while(x!=0){num[++lct]=x%2;x/=2;}memset(dp,-1,sizeof(dp));return dfs(lct,1,1,0,0);
}
signed main(){int a,b;scanf("%lld %lld",&a,&b);cout<<sol(b)-sol(a-1);return 0;
}

round number相关推荐

  1. java round number,Java Number Math 类

    Java 中 int 和 Integer 的区别 1. int 是基本数据类型,int 变量存储的是数值.Integer 是引用类型,实际是一个对象,Integer 存储的是引用对象的地址. 2. I ...

  2. [POJ3252]Round Number(数位dp)

    题目链接:http://poj.org/problem?id=3252 题意:求范围内数字二进制下0的个数大于等于1的个数的数的个数. 数位dp,dp(l,zero,one,fz)记录当前第l位时0的 ...

  3. oracle 数据保留两位小数(祥解ROUND()TRUNC(),TO_CHAR( number, ‘格式’ )函数)

    在开发中经常会去进行一些计算,遇到除法经常会遇到除不尽的情况,当然各个公司要求不同,处理方式不一样,所要求精度也不一样.整理下oracle自带保留两位小数常用函数: 1 ROUND( number, ...

  4. Oracle round函数是什么意思?怎么运用?

    如何使用 Oracle Round 函数 (四舍五入) 描述 : 传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果. SELECT ROUND( number, [ decimal_p ...

  5. mysql存储过程number类型_MySQL存储过程的基本函数(三)

    (1).字符串类 首先定义一个字符串变量:set @str="lxl"; CHARSET(str) //返回字串字符集 select charset(@str); +------- ...

  6. 详解python中的round()函数

    round() round()是python自带的一个函数,用于数字的四舍五入. 使用方法(环境python3) round(number,digits) 参数: digits>0,四舍五入到指 ...

  7. python round函数_python中round函数如何使用

    round函数很简单,对浮点数进行近似取值,保留几位小数.比如 >>> round(10.0/3, 2) 3.33 >>> round(20/7) 3 第一个参数是 ...

  8. 牛客假日团队赛5 F 随机数 BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 (dfs记忆化搜索的数位DP)...

    链接:https://ac.nowcoder.com/acm/contest/984/F 来源:牛客网 随机数 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

  9. php round half even,PHP round( )用法及代碼示例

    在處理具有非常高的十進製數字值的問題時,例如(121.76763527823),我們經常會遇到將它們四舍五入的問題.手動將它們取整可能是非常耗時且錯誤的做法.取而代之的是,可以使用PHP的內置功能,即 ...

最新文章

  1. php file size,PHP filesize() 函数
  2. VC2008 忽然无法调试DLL的解决方法
  3. 基于struts2的寝室圈项目
  4. Windows消息:怎样使用RegisterWindowMessage注册消息
  5. 第四范式受邀成为5G消息工作组成员
  6. 放弃Windows,用国产开源替换政府办公系统!这个国家做到了
  7. hdu 5813 Elegant Construction
  8. 怎么利用计算机计算潮流计算,电力系统潮流计算的目的是什么
  9. 跨域技术(JSONP与CROS)
  10. nodejs实践录:按行处理文件数据的示例
  11. 深度优先搜索之在图上寻找路径
  12. Madagascar的自定义浮点型函数--指数函数和幂函数
  13. mysql utf8转gbk cmd_修改xampp的mysql数据库utf8mb4为gbk以解决cmd内中文显示为问号
  14. oracle 手机壁纸,盘卷先知 Coiling Oracle壁纸图片65 - 猫猫壁纸酷 wallcoo.com
  15. Digester解析XML文件
  16. 跟着源码看lcn分布式事务
  17. java程序判断是否是闰年_用Java程序判断是否是闰年
  18. 银行半结构化面试题目汇总
  19. 重要:QA和QC的区别
  20. [高通SDM450][Android9.0]CTA认证--拆分申请权限分组

热门文章

  1. R语言描述性统计:使用mean函数计算dataframe数据中指定数据列的均值
  2. mySQL8.0如何修改密码
  3. GlusterFS 介绍及使用
  4. 从小白开始学习CAD(一)
  5. 仿淘宝头像上传功能(二)——程序篇
  6. android键盘工具栏,android-如何禁用在软键盘上显示“建议”
  7. 每天多睡1小时就能减掉20斤?打工人如何才能睡够?
  8. 如何查看自己的手机被是否被别人定位了?
  9. 一篇读懂聚集索引、非聚集索引、覆盖索引的工作原理!
  10. OSChina 周二乱弹 —— 我敢给你上菜,你敢吃么?