中秋特辑—洛谷题目讲解

P2431 正妹吃月饼

又快到了一年一次的中秋节了,也不知道大家有没有去吃月饼,嘿嘿,我最喜欢云腿月饼老好吃了。
虽然是到了中秋节,但是我们依然要刷题来复习和提高自己欸。
现在Bugku都开始发月饼了,嘿嘿但是我们尽头主要是回归一下老本行,今天就进行一次算法题目讲解吧,正好我们可以复习复习一下以前的知识,那么我们就开始吧
今天我们讲解的是

众说周知,洛谷的难度都要往上提一个级别才是这个题目的真正难度。。。咳咳咳好了好了话不多说,我们就开始看题吧

好吧,我的第一感觉就是贪心,模拟。
让我康康我猜的对不对

欸,还有个进制?好吧,,等晚一些我再研究一下为啥会用到进制。
如果不看进制,我想到的第一个思路就是:
1.将所有的月饼克数按照从小到大的顺序相加,加到一个在a和b范围以内的值
2.找到这样一个值以后返回就可以了。
既然有思路我们就先试试看这样写能不能成

#include<iostream>
using namespace std;
int main(){int sum=1,a,b,ans=2,num=0;cin>>a>>b;while(sum<=b){sum+=ans;ans*=2;num++;}cout<<num;return 0;
}

这就是最简单的思路了对吧,看上去也很简单,就是不断乘不断加再不断计数
对于num为啥从0开始其实是因为,虽然一开始我们sum已经是0了但是在最后一次while循环中我们会加上下一个我们不会去吃的月饼就会多一个,如果num从1开始算的话,我们最后输出的num就要减去最后我们没有吃的哪一个月饼,然后我们运行一下尝试一下

好像没啥大问题,那么我们先提交看一下
你看,已提交问题就出来了

其实出现问题是肯定的,毕竟一个简单的模拟不可能在洛谷达到普及+/提高的难度
那咋办啊,我们先找到原因,回到题目

发现问题了,这空间那么大,无法满足。
这个时候我们就想到刚才的进制了,莫非用二进制表示?
那么我们先想一下思路,说到二进制就想到了位运算
因为我们存在了第一个1g月饼的存在,也就是说明我们无论如何吃,要吃多少,都肯定是一个单数,那么单数在二进制如何表达呢,就是最低位肯定为1,并且我们可以从a开始到b中间,我们可以大胆的推测找一下1最多的二进制然后将1的个数统计出来也许就可以了。
好的理论存在,我们就可以开始实践一下了:
我们先进行一下分布实现:

while((a | a+1)<=b){a |= a+1;}

这一步主要是找到a和b之间1最多的二进制,下一步

while(a){ans +=a&1;a>>=1;}

统计最多1的二进制中a的个数,ans每统计一次a就右移一位也就是说111就会变成011移动一位之后最右边的1就不在了最左边用0代替也可以省略0
然后结合起来
【因为我对于二进制的了解不多,我运用到的是以前看到过的相似的一个题的写法】

#include<iostream>
#include<cstdio>
using namespace std;
int main(){int ans=0,a,b;cin>>a>>b;while((a | a+1)<=b){a |= a+1;}while(a){ans +=a&1;a>>=1;}cout<<ans;return 0;
}

芜湖,然后我们尝试运行一下

结果还是一样的,那么我们再提交一下尝试一下

欸~~~~~为啥呀为啥呀。。。。
好吧,我们再理性分析一波,会不会是a和b的值我用Int装不下?
那么我们尝试一下long long
int a b;
改为 long long a b;
试一下,欸,好像没问题了欸

嘿嘿嘿,你学废了吗,这题其实是有一点难度的,主要是考大家对于二进制的熟悉和写法,还有我们要充分主要到二进制的特点,只有0和1我们就要运用到两个的个数。
不知道大家有啥其他的写法,大家可以一起分享和交流

中秋特辑--洛谷题目-P2431【正妹吃月饼】相关推荐

  1. 洛谷P2431正妹吃月饼

    刷题之路-数论 洛谷P2431正妹吃月饼 传送门 题目描述 做题思路 将a转换成二进制,然后从最小位开始,对每一位进行判断:若为0,则转换为1,若转换后大于b,则结束,否则继续.最后对a中的1的个数进 ...

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

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

  3. P2431 正妹吃月饼

    P2431 正妹吃月饼 求给定区间二进制1的个数最多的数 即:max{popcount(i)},i∈[l,r]max\{popcount(i)\},i\in[l,r]max{popcount(i)}, ...

  4. 洛谷 P2431 正妹吃月饼

    题目描述 今天是中秋节.uim带来了一堆大小不同且味道各异的月饼. 这些月饼的质量分别是1g,2g,4g,8g,16g....后面一个是前面的2倍.每种只有一个. uim让正妹随便吃. 正妹希望尝试尽 ...

  5. P2431 正妹吃月饼 [位运算]

    传送门 题意 : 求l-r之间所有数 , 表示为2进制1最多的有几个 考虑贪心 , 每次将l第一个不为0的加1 , 大于r时停止 这里有一个玄学的操作 , l = l|(l+1) , 就可以实现将第一 ...

  6. luogu2431 正妹吃月饼

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

  7. 【数论】[luoguP2431]正妹吃月饼

    题目 很少做这种二进制的题 感觉很陌生 以后要多练练 感觉位运算好绕 把a二进制拆分 然后从最低位开始找 如果当前位是0的话 就判断一下把它变成1之后是不是比b小 小的话就变 有点贪心思想 代码如下 ...

  8. Codeforces与洛谷题目之间跳转油猴插件

    title: Codeforces与洛谷题目之间跳转油猴插件 date: 2023-05-04 15:32:39 categories: 其他 tags: 油猴脚本 Codeforces与洛谷题目之间 ...

  9. 洛谷题目按难度点评---入门难度

    洛谷题目按难度点评---入门难度 1.p1421 小玉买文具 难度:入门难度 考点:输入,输出,整数的四则运算 适用:小学生 #include <stdio.h> int main(){ ...

最新文章

  1. Spring Bean 装配和依赖注入
  2. 杜伦大学提出GANomaly:无需负例样本实现异常检测
  3. Navicat使用Instant Client创建连接到Oracle数据库的正确姿势
  4. 用户重要数据转移方法〖罗斌个人工作经验谈〗
  5. wxWidgets:wxStdOutputStreamBuffer类用法
  6. boost::graph模块使用write_graphviz 输出 BGL adjacency_list 的简单示例
  7. 概率论-1.3 概率的性质(重点:可列与极限之间的互相转换)
  8. 01初识鸿蒙_移动通讯技术的发展
  9. 第五届大数据科学与工程国际会议(2021)成功召开
  10. MonoRail学习笔记十八:在VM中可以使用哪些系统变量
  11. cass生成曲线要素_CASS菜鸟入门指南-道路断面
  12. 人工智能能写剧本了 还被拍成了9分钟的短片
  13. CSP 201712-3 Crontab(100)
  14. Android利用WifiDirect实现文件传输功能
  15. win10全屏之后任务栏不消失的问题
  16. Android高仿苹果计算器
  17. 《数学之美》一些知识
  18. IKEv2的认证数据生成过程
  19. R柱状图,叠图(排序)
  20. 计划测试系列(一)--万事开头难

热门文章

  1. poj3077的想法
  2. MYSQL大数据量下的,SQL练习,SQL常用高级关键字讲解
  3. 结对编程——最长单词链
  4. 89c52单片机c语言延时程序计算 脉冲,89C52单片机定时器延时时间的计算与程序解析 - STC89C52单片机定时器/计数器详解(含程序和定时器2)...
  5. 51单片机学习之-串口中断
  6. 供应链金融(四):保理业务中的风控手段
  7. android剪切文件怎么恢复吗,【剪切的文件如何恢复】被剪切或删除的文件夹怎么恢复...
  8. 50部世界名著中最经典的那一句话
  9. Gym - 100623I Important Wires
  10. 用计算机弹出娃娃脸,在windows xp中释放隐藏网速