华为机试 - 不含101的数
admin
2024-03-12 06:37:00
0

目录

题目描述

输入描述

输出描述

用例

题目解析

算法源码


题目描述

小明在学习二进制时,发现了一类不含 101的数,也就是:

将数字用二进制表示,不能出现 101 。
现在给定一个整数区间 [l,r] ,请问这个区间包含了多少个不含 101 的数?

输入描述

输入的唯一一行包含两个正整数 l, r( 1 ≤ l ≤ r ≤ 10^9)。

输出描述

输出的唯一一行包含一个整数,表示在 [l,r] 区间内一共有几个不含 101 的数。

用例

输入1 10
输出8
说明区间 [1,10] 内, 5 的二进制表示为 101 ,10的二进制表示为 1010 ,因此区间 [ 1 , 10 ] 内有 10−2=8 个不含 101的数。
输入10 20
输出7
说明区间 [10,20] 内,满足条件的数字有 [12,14,15,16,17,18,19] 因此答案为 7。

题目解析

本题如果用暴力法求解,很简单

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});rl.on("line", (line) => {const [l, r] = line.split(" ").map(Number);console.log(getResult(l, r));
});function getResult(l, r) {let count = r - l + 1;for (let i = l; i <= r; i++) {if (Number(i).toString(2).indexOf("101") !== -1) {count--;}}return count;
}

但是本题的1 ≤ l ≤ r ≤ 10^9,也就是说区间范围最大是 1 ~ 10^9,那么上面O(n)时间复杂度的算法会超时。

因此,我们需要找到一个性能更优的算法。

本题需要使用数位DP算法,具体逻辑原理请看

数位DP - 带3的数_伏城之外的博客-CSDN博客

数位DP - 带49的数_伏城之外的博客-CSDN博客

算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});rl.on("line", (line) => {const [L, R] = line.split(" ").map(Number);const count = digitSearch(R) - digitSearch(L - 1);console.log(count);
});function digitSearch(num) {const arr = num.toString(2).split("").map(Number);const f = new Array(arr.length).fill(0).map(() => new Array(2).fill(0).map(() => new Array(2)));return dfs(0, true, f, arr, 0, 0);
}function dfs(p, limit, f, arr, pre, prepre) {if (p === arr.length) return 1;if (!limit && f[p][pre][prepre]) return f[p][pre][prepre];const max = limit ? arr[p] : 1;let count = 0;for (let i = 0; i <= max; i++) {if (i === 1 && pre === 0 && prepre === 1) continue;count += dfs(p + 1, limit && i === max, f, arr, i, pre);}if (!limit) f[p][pre][prepre] = count;return count;
}

相关内容

热门资讯

原创 卓... 玛雅文明,一直以来在中文圈内都被视作一个充满神秘色彩的存在。其神秘之处,便是玛雅人创造了出色的历法体...
信用建设|湛江“信易贷”:信用... 为推进社会信用体系建设,近年来,湛江市发展和改革局以信用为核心、科技为支撑,开发湛江“信易贷”平台,...
茶颜悦色官宣重回深圳,双店齐开... 深圳商报·读创客户端记者 罗凯燕 双店齐开,都在粤海街道!3月1日,新中式茶饮品牌茶颜悦色通过官方微...
对外直接投资备案(核准)申报流... (一)网上填报申请 1. 登陆河南政务平台→法人办事→对外直接投资备案→在线办理→商务部业务系统统一...
中东局势影响如何?十大券商策略... 财联社3月1日讯,下周即将迎来“两会”的召开,又遇上本周末突发的中东局势,下周市场如何走?十大券商最...
“不一样”的宁波银行 出品 | 妙投APP 作者 | 刘国辉 编辑 | 丁萍 头图 | AI生成 A股成长性最强银行之一的...
钨企股价连创新高!有股东高位减... 文丨惠凯 编辑丨承承 钨价上涨带动钨企股价表现强势,股东减持与ESG表现分化并存。对于行业龙头的未来...
2026开年A股掀“一肩挑”改... 每经记者|吴永久 张宛 每经编辑|何建川 2月26日,蓝润发展旗下“猪肉大王”龙大美食发布人事调整...
小红书获客的本质:在娱乐场中建... 为什么你发100篇小红书,不如别人1篇能获客? 很多人做小红书获客,都陷入了一个误区:疯狂堆笔记数量...
消费小贴士:“棉”vs“绵”,... 近年来,随着消费者对个人护理卫生要求的提高,一次性洗脸巾凭借“方便、卫生”的特点,成为许多家庭的高频...
金价油价或大幅上涨 北京时间2月28日,美国和以色列对伊朗发动联合军事打击,地区局势急剧升级。3月1日,新华社援引伊朗媒...
突发大利空,大A周一咋走? 作者| 史大郎&猫哥 来源| 是史大郎&大猫财经Pro 周末大利空,美以联手攻击伊朗,特朗普说伊朗领...
原创 第... 这回真裁到大动脉了 第一批用AI代替人力的公司,已经开始后悔了。 在过去两年里,有一批科技公司走在...
德元升提醒|胃的“水果忌口单”... 都说“十人九胃”,尤其对于脾胃功能本就不够强壮的中老年朋友来说,胃部不适更是家常便饭。很多人误以为养...
3月31日前闭店!GUESS宣... 来源:北京日报客户端 记者3月1日获悉,多名消费者收到来自GUESS官方的短信,称该品牌因经营模式调...
「迎接全国两会特稿③」向稳:现... 来源:经济日报 过去的一年,中国经济稳中求进,以产业之稳筑牢发展之基。2025年,我国工业增加值41...
赵继伟首节8分余嘉豪9+5 男... [搜狐体育战报]北京时间3月1日消息,2027年男篮世界杯预选赛进入第四比赛日角逐。在菲律宾马尼拉,...
沙特股市开盘闪崩 伊朗局势对市场的第一轮冲击波来了。 沙特股市开盘暴跌 3月1日下午,沙特股市开盘闪崩,一度暴跌约5%...
从70亿到36亿,白酒深度调整... 在行业下行周期中,企业的选择往往比数据本身更具意义。 2月27日晚间,珍酒李渡发布2025年年度业绩...