收藏夹重新回顾

简介: 收藏夹重新回顾

分享一道收藏的好题

我收藏的这道题是一道红题,来自洛谷 P2623,题目名为「计数」。这道题的难度大概在紫到黑的样子,我当初收藏它是因为它是一道奇怪的计数题,有点格雷码的感觉。这道题给定两个整数 ab,问有多少个 x[a,b],满足x(x+1)[a,b],其中 表示按位异或操作。

一开始看到这道题,我一脸懵逼。因为我稍微做过一些计数题,但是好像从没见过按位异或的题。于是我开始思考如何解决这道题。我尝试画图,分析一些规律,但是一直都没能得到正确的答案。

后来我在网上查找资料,看到了一篇题解,介绍了一种非常巧妙的做法。这个做法基于一个性质:如果两个数按位异或后得到的二进制表示中,某一位为 1,则这两个数在这一位上的二进制位一个为 0 一个为 1。这样我们可以对于每一位来统计答案。

具体地,我们可以考虑从高位到低位,类似于二分的操作,不断将区间一分为二。具体地,我们假设当前二进制位为第k 位,我们设Lab 按照当前位所对应的二进制为止的数,而R 则是 L+1。例如,如果当前位是第 3 位,a 的二进制表示为 101110,b 的二进制表示为 100011,则L 为 101000,而R 则为 101001。这样,我们就把区间一分为二。

接下来,我们考虑 x[L,R1] 的情况,这样对于 x+1,它肯定是在[L+1,R] 中。于是我们可以递归地计算[L,R1][L+1,R] 中满足条件的x 的个数,然后把两个区间的答案加起来即可。

当然,在具体的计算中,我们还需要考虑一些特殊情况,例如当L=0x 就不能取 0,而当 L=R1 时,我们就不需要递归地计算,直接返回答案即可。

总体而言,这道题的计数方法非常巧妙,值得好好思考和学习。


相关文章
|
6月前
|
前端开发
首页变灰 实现
首页变灰 实现
首页变灰 实现
|
SQL XML 算法
揭秘!我收藏夹里的常用网站
揭秘!我收藏夹里的常用网站
221 0
|
数据采集 人工智能 自然语言处理
分享我的收藏夹里面的这些神器(一)
趁手的工具有时候能够帮助我们节省很多时间和精力,下面就给大家介绍一下我收藏夹里面的神器吧。
402 0
|
数据可视化
分享我的收藏夹里面的这些神器(二)
下面来第二期,这一期会介绍三个比较好用的工具。
468 0
|
Web App开发 JavaScript
|
Web App开发 移动开发 区块链
自定义地址栏与收藏夹中的图标
关于Favicon favicon 在英文中有几个别名,叫做 shortcut icon,website icon,tab icon,URL icon,bookmark icon,对应中文来说也叫作网页小图标、网站缩略图或收藏夹图标、书签图标。
1283 0
|
Android开发 iOS开发 Windows
如何将页面设置为微信端才能打开
  我们有时候开发一个新项目比较辛苦,不想让别人轻易就能反编译代码,我们可以加一个授权登录,如果不是在微信端登录就会提示“请在微信客户端打开链接”,如下图所示,这就是很多网友说的微信链接无法在pc端打开飞原理。
1080 0