题目大意

求一个正整数集合\(K\),使得\(\sum_{k\in K}2^k\in[A,B]\),且\(|K|\)最大。\(A,B\)大小在long long范围内。

思路

\(\sum_{k\in K}2^k\)?这不就是一个二进制数,对于该数上的每一个数位\(k\),若\(k\in K\),则该数位上的数为1,否则为0么?

所以原题就变成了:求一个整数\(x\),使得\(x\in[A,B]\),且其用二进制表示的1的个数最多。

怎么求这个\(x\)呢?

  1. 若\(A,B\)二进制最高位数不同,则结果为\(A\)最高位数-1。如\(A=(10100)_2,B=(101)_2\),则结果为4,因为\((1111)_2\)。
  2. 满足情况1时的特殊情况。若\(A\)用二进制表示全是1,则结果为情况1的结果加1.如\(A=(11111)_2,B=(101)_2\),则结果为5,因为\((11111)_2\)。
  3. 若最高位数相同,则把两个数的最高位去掉,转化为子问题,再在此基础上+1.如:\(A=(110100)_2,B=(100101)_2\),则结果为5,因为把两个数最高位的1去掉就成了情况1的例子,再在此基础上+1便是。

注意

  • 因为A、B是long long,所以不能直接用1进行左移操作(因为默认的结果是int)。
  • 递归时,当A、B都是0时要提前跳出。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cassert>
using namespace std; #define ll long long int GetHighbitPos(ll x)
{
int ans = -1;
while (x)
{
ans++;
x >>= 1;
}
return ans;
} ll All(int n)
{
ll x = 1;
return (x << n + 1) - 1;
} ll Erase(ll x, int pos)
{
ll t = 1;
return x & ~(t << pos);
} int Dfs(ll below, ll above)
{
if (above == 0)
return 0;
int pa = GetHighbitPos(above), pb = GetHighbitPos(below), ans;
assert(pa >= pb);
if (pa > pb)
{
ans = pa;
if (above == All(pa))
ans++;
return ans;
}
else
return 1 + Dfs(Erase(below, pb), Erase(above, pa));
} int main()
{
ll below, above;
cin >> below >> above;
cout << Dfs(below, above) << endl;
}

luogu2431 正妹吃月饼的更多相关文章

  1. 洛谷 P2431 正妹吃月饼 解题报告

    P2431 正妹吃月饼 题目描述 今天是中秋节.\(uim\)带来了一堆大小不同且味道各异的月饼. 这些月饼的质量分别是\(1g\),\(2g\),\(4g\),\(8g\),\(16g\)....后 ...

  2. 洛谷【P2431】正妹吃月饼

    二进制前置技能:https://www.cnblogs.com/AKMer/p/9698694.html 题目传送门:https://www.luogu.org/problemnew/show/P24 ...

  3. 题解 P2431 【正妹吃月饼】

    假如做这道题想着用如下朴实的模拟,那肯定要WA至少4个点. #include <iostream> #include <cstdio> using namespace std; ...

  4. 中秋节福利---HTML5-玉兔吃月饼游戏

    中秋节快来了.送大家点福利: HTML5-玉兔吃月饼游戏 效果图: 代码下载:点击这里!!

  5. struts2是如何加载相关的package元素节点信息的

    这不是一篇纯技术文章,而是一篇分享我个人在前后端分离路上收获的点点滴滴的文章,以此来为准备尝试前后端分离或者想了解前后端分离的童鞋做一个大体的讲解. 上一家公司是家小公司,做了一年的全栈开发,对前端的 ...

  6. NOIP 2017 游记?

    Day -1 晚上被dg谈了谈人生,没有卵用 Day 0 早上又被老吕教训了一遍,想打板子,打印机还坏了,老吕又奶了一波题,后来发现一个都没中.之后就出发了,中午吃了点肯德基,妈妈来了,给我了个小袋子 ...

  7. 微信小程序学习指南

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  8. 创建几个常用table展示方式插件

    这次和大家分享的是自己写的一个table常用几种展示格式的js插件取名为(table-shenniu),样式使用的是bootstrap.min.css,还需要引用jquery.min.js包,这个插件 ...

  9. 轻量级前端MVVM框架avalon - 执行流程2

    接上一章 执行流程1 在这一大堆扫描绑定方法中应该会哪些实现? 首先我们看avalon能帮你做什么? 数据填充,比如表单的一些初始值,切换卡的各个面板的内容({{xxx}},{{xxx|html}}, ...

随机推荐

  1. Redis hash结构 和常用命令

    Redis 数据结构 -- 哈希 hash 是 一个 String 类型的field 和 value 的映射表 hash 的键值 对在内存中的一种无序的状态 命令 说明 备注 hdel key fie ...

  2. php实时推送系统消息给客户端

    在我们实际开发过程中,有些数据需要实时获取:比如erp系统中的订单信息,OA系统中的流程审批等都需要及时处理,这时我们就不能再使用http协议了:当然也可以使用轮询的机制.但是轮询请求中有大半是无用, ...

  3. C# 多线程系列(二)

    传递数据给一个线程 通过函数或lambda表达式包一层进行传递. static void Main(string[] args) { Thread thread = new Thread(() =&g ...

  4. P3709 大爷的字符串题(50分)

    题目背景 在那遥远的西南有一所学校 /*被和谐部分*/ 然后去参加该省省选虐场 然后某蒟蒻不会做,所以也出了一个字符串题: 题目描述 给你一个字符串a,每次询问一段区间的贡献 贡献定义: 每次从这个区 ...

  5. buf.readInt16LE函数详解

    offset {Number} 0 noAssert {Boolean} 默认:false 返回:{Number} 从该 Buffer 指定的带有特定尾数格式(readInt16BE() 返回一个较大 ...

  6. kotlin第一个项目的搭建

    怎么在Android Studio中使用Kotlin? 1.使用Android Studio的插件 2.将Android Studio升级到3.0版本:目前不推荐,因为3.0的版本目前还是Dev Ch ...

  7. 【PostgreSQL-9.6.3】函数(1)--数值型函数

    函数表示对输入参数返回一个特殊计算结果的值.PostgreSQL中的函数种类比较丰富,主要分为以下几类:数值型函数.字符型函数.日期和时间函数.条件判断函数.系统函数.加密函数以及其他函数.这篇文章只 ...

  8. 终极解决VS2015 安装失败问题,如 安装包损坏或丢失

    1.去微软官网下载完成ISO镜像,最好不要在线安装, 打开官方链接 https://www.visualstudio.com/zh-cn/downloads/download-visual-studi ...

  9. webSphere

    WebSphere 是 IBM 的软件平台.它包含了编写.运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台.跨产品解决方案所需要的整个中间件基础设施,如服务器.服务和工具.WebSphe ...

  10. vue-属性传值 props

    props属性传值 1.传具体的值  string(字符串) number(数值) boolean(布尔) 2.传一个引用 array(数组)  object(对象) ----传引用----- 代码 ...