4163. 【NOI2015模拟WWX】求同 (【CF251D】Two Sets)

前言:

这两道题,其实是一道题,几乎没有什么区别。

题目(4163. 【NOI2015模拟WWX】求同)

:求同,字面意思就是寻求共同之处。这道题目就与此相关。简而言之,问题是这样的,给出n个非负整数a1..an,要求2个正整数数集S和T,使得S和T中的所有元素都在[1,n]之间,且S和T的交集为空,S和T的并集大小为n。 那么这里的求同具体来说就是指:设S中所有元素对应的a中数值按位异或的值为X,T中所有元素对应的a中数值按位异或的值为Y,使X和Y按位与的值尽量大。

题解

设ans=X and Y,sum=X xor Y,注意到sum的值是不变的,我们只要确定了X,Y就确定了。那么我们想对于sum某一位0的位,我们是不是尽量想让X的这一位为1(如果X这位为1,那么Y的这一位也为1,只有这样对ans才会有贡献),假如我们现在对于sum的某一位为0,那么这一位肯定有偶数个一,那么我们是不是应该尽量的将他们分开两组,且每组1的个数都是奇数。我们可以列出一条方程:
ak:x1v1xorx2v2......xorxnvn=0/1 a k : x 1 v 1 x o r x 2 v 2 . . . . . . x o r x n v n = 0 / 1 如果xi表示第i个数是否在第一组,vi表示第i个数二进制下第k位的值,0/1,表示sum这一位否./是为0,解方程即可。
至于CF那道题,大家可以去YxuanwKeith的博客的博客里找。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值