二进制study1

div3的B题没想到二进制,挫败感满满,+ 之前碰到二进制的题目就害怕【进制转换留下的阴影】

绝对参考:
大一寒假培训(四)——二进制枚举_Icey_dying的博客-CSDN博客大一寒假培训(四)今天学习的知识是二进制枚举首先,了解一下二进制操作二进制操作算数位运算(与、或、非、异或)与(&) 对于指定的两个数 A=60(0011 1100) B=13(0000 1101) 执行一下操作 A&B=12(0000 1100) 就是对二进制每一位进行了一次与操作,同为1,结果为1,否则为0或(|) 对于指定的两个数...https://blog.csdn.net/Icey_dying/article/details/103836141?ops_request_misc=&request_id=&biz_id=102&utm_term=NEFU%20%E5%A4%A7%E4%B8%80%E5%AF%92%E5%81%87%E8%AE%AD%E7%BB%83%E5%9B%9B%EF%BC%88%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%9E%9A%E4%B8%BE%EF%BC%89&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-103836141.142^v88^control,239^v2^insert_chatgpt&spm=1018.2226.3001.4187

佬的博客笔记,跟着学习,好强!记录学习笔记~ 

一、基础知识

  • 1.位运算

使用情景:分支为两种情况互相转换

1、与(&) 同1为1,不同为0  【同进1】

2、或(|) 同0为0,不同为1 【不同进1】

3、非(~)  本身的二进制中0为1,1为0【换位】

4、异或(^) 两个数二进制位不同结果为1,相同为0【同1异0】

             异或也叫半加运算,其运算法则相当于 不带进位的二进制加法

             一个数异或同一个数两次,则结果还是原数,就是(a^b)^b=a

    0异或任何数=0+任何=任何数,就是0^a=a

    1异或任何数=1+任何且不进制=任何数取反

  • 2.位移操作【箭头指向哪里,就往哪里移动x位】

1、左移 <<   乘法运算 bit(1<<x) 乘 2^x

2、右移>> 除法运算 bit(1>>x) 除2^x

  • 3.二进制枚举

使用情景:被枚举元素只有2种情况,eg.灯的开关,一种东西取或者不取       

二、相关例题:

1)二进制枚举

    题目:有n块钱,每一种蛋糕的价格成2的倍数递增2^0 2^1 2^2…… 现有k种蛋糕,最多有多少种购买方式

    思路:1.蛋糕价格2次方递增,每种1、0两种状态,可以用二进制枚举来设1为拿与0为不拿

                Eg.n=1010  k=3 二进制有3位,共有2^k种(包含0)

                若k=4,则有10+1种拿法   0000 0001 0010 … 小于10的数字的二进制都满足条件

2)异或运算【两两相消】

     有n个字符串,和n-1个匹配字符串,字符串相同的两两配对,找出哪一个字符串没有匹配字符串

     1)异或两次=本身  两两相消

     2)数字类型:

任何数异或0=任何数      相当于*1  

        0搭配异或两次同一个数字有魔法效果--->归0   (0^任何)^任何=0

        0搭配异或1次同一个数字有平常效果--->归数字   0^任何=任何

        用来找单身狗数字好用max

字符串类型:

(Str1^str2^str3)^str2^str3=str1   字符串每个位置取异或 【for循环实现】

3)二进制枚举板子题:

给出长度为n的数组,求能否从中选出若干个,使他们的和为K.如果可以,输出:Yes,否则输出No

思路:板子,判断能否使用条件:1.拿与不拿两种状态 2.任意个数

4)二进制枚举

题目:初始值为t。路过十字路口,数值*2或加油站,数值-1,最终恰好为1求符合条件的个数

思路:----> 两种状态互相转换,可以用二进制来模拟所有状态(筛选条件符合的cnt1=5,cnt2=9)  

                  十字路口1  加油站0   两个for循环枚举i种模式和第j位置

                     tip.最后一个为十字路口,也就是实际上有10-1=9个十字路口

5)二进制枚举

题目:给你n张扑克,每张都对应一个点数,分别对应1-13,K 就是13;J 是11;Q是12;

          现在想从这些扑克牌中取出一些牌,让这些牌的点数的和等于一个幸运数值P,问有多少种            方案?

思路:每张扑克拿or不拿  1or0    13张扑克--->13位   for循环i个情况,每个情况第j位拿不拿

6)二进制枚举应用

题目:

在选举问题中,总共有n个小团体,每个小团体拥有一定数量的选票数。如果其中m个小团体的票数和超过总票数的一半,则此组合为“获胜联盟”。n个团体可形成若干个获胜联盟。一个小团体要成为一个“关键加入者”的条件是:在其所在的获胜联盟中,如果缺少了这个小团体的加入,则此联盟不能成为获胜联盟。一个小团体的权利指数是指:一个小团体在所有获胜联盟中成为“关键加入者”的次数。请你计算每个小团体的权利指数。

长度为n的数组,n个中若干个随机组合,和为cnt。若cnt>sum/2,判断组成的数中每一个的值是否为关键一篇。若是权值增加

思路:

每个小团体两个状态,参与1,不参与0  二进制枚举所有可能性

for循环i种情况,for循环第j位,加入其中,总和若>sum/2,每一位是否为关键,b[j]++

收获满满的一天,虽然感觉大部分题目都是二进制的枚举~

暑假前把y总基础算法给刷刷完!!!

六级弃掉,不管了o(╥﹏╥)o

明天也要开始大物的复习啦~~~

晚安 1:10

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值