有两个字符串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 (其中有3个1)
答案是: 输出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]
有3个0,当我们把B的最后的1 放到最后,此时A - B,有3个1(0, 0, 0, 0, 1, 1, 1)
如果ans_ones有1个,那么我们把让B = 1 1 1 0 1 0 0 (此时,A-B有1个1)
即,最开始让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的
CF_二进制减法、技巧
最新推荐文章于 2023-07-01 17:22:24 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)