CF_二进制减法、技巧

本文详细探讨了二进制减法的基本原理,包括如何进行位运算以及在遇到借位情况时的处理方法。同时,文章分享了一些实用的二进制减法技巧,帮助读者更好地理解和应用二进制运算在实际问题中。
摘要由CSDN通过智能技术生成

LINK

有两个字符串A和B, 这两个字符串都有ones个1 和 zeros个0 (zeros >= 1, ones >= 2)
你需要去构造这两个字符串,且要保证: A和B都没有前导零
给定ans_ones,表示你要保证: A-B后的结果, 恰好有ans_ones个1 
	(A-B这个结果,可以有前导零)

ones = 2, zeros = 3, ans_ones = 3
你可以构造:
A = 1 1 0 0 0 		(你肯定要保证: A > B)
B = 1 0 0 0 1
可以发现: A - B后的结果 = 0 0 1 1 1  (其中有31)

答案是: 输出A和B的值  (如果无法构成,则输出NO)
(ones + zeros <= 2e5, 即AB字符串的长度)

规范:
AB的长度是n(n = ones + zeros):
A	=   1    x    x    x    x 
B 	=   1    x    x    x    x
ans	=   0    x    x    x    x
	   [0]  [1]  [2]  [3]  [n-1]

1, 由于说AB没有前导零,所以ans的[0] 一定是0


错误思路:
1, 
A = 1 1 1 	1    0   0   0
B = 1 1 1 	0    0   0   1
		   [i]30,当我们把B的最后的1  放到最后,此时A - B,有310, 0, 0, 0, 1, 1, 1)
如果ans_ones有1个,那么我们把让B = 1 1 1 0 1 0 0  (此时,A-B有11)
即,最开始让B = 11..11 00..00, 然后让最后的1 往后移动ans_ones个位置
	最终变成: b = 11..11  00..00  1   00..00
	这种策略,可以得到的ans_ones的最大值是(zeros),即让b = 11..11  00..00  1
 '但前提是:  zeros <= ans_ones '
 
 2, 此时你会认为,是否当(ans_ones  >  zeros)时, 一定是无解呢???
 	(因为,只有B中的0  可以有机会变成 ans里的1)
 	你非常容易会这样认为....
 	因为,你会认为, 最后ans里的1,一定是由(按位的 A的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值