首页 > 其他分享 >Maximum AND

Maximum AND

时间:2023-11-01 10:02:28浏览次数:41  
标签:该位 排列 可以 Maximum 子集 位是

看到这么多位运算,拆位考虑。

对于\(f(a,b)\)的一位,要么是0,要么是1。

该位是1,说明有某种\(b\)的排列,使得该位上\(a_i \oplus b_i\)均为1。(因为\(\&\)的结果是1,说明全都是1)。

那么我们要优先满足哪一位为1呢?

一个直接的想法是优先满足高位为1,因为\(2^k > 2^{k-1}+2^{k-1}+...+2^1+2^0\),当前位如果可以为1,那么令它为1肯定严格优于让低位为1的任何方案(让低位为1的任何方案最大就是全都都是1,但是这也更小)。

然后发现有的位是无法为1的,只有a中0和1的个数刚好等于b中1和0的个数时,这一位才可能为1。

首先找到最高的可以为1的位\(k\),上面证明了,这样子的方案一定是最优解。

然后考虑后面的位,类似的,我们也尽量让每一位都为1。但是这样有一个问题:\(k\)位为1的约束,限制了\(a\)和\(b\)之间的匹配。

一开始(求\(k\)的时候),\(a\)和\(b\)可以任意匹配。

然后,\(a\)中所有第\(k\)位是0的可以和\(b\)中所有第\(k\)位是1的排列,\(a\)中所有第\(k\)位是1的可以和\(b\)中所有第\(k\)位是0的排列。也就是说,原集合分裂成了两个子集。直接对这两个子集操作,也是\(O(n)\)的。

类似的,每次对于一个可以排列的\(a,b\)的集合计算贡献之后,都会让它分成两个子集,为了保证复杂度严格\(O(n)\),要把空集特判掉。

具体实现可以记录下标。

CODE

标签:该位,排列,可以,Maximum,子集,位是
From: https://www.cnblogs.com/zhangchenxin/p/17802380.html

相关文章

  • #期望dp#CF1810G The Maximum Prefix
    洛谷题面CF1810G分析考虑最大前缀和满足两个条件,就是所有前缀和都不超过,以及一定有一个等于。那么就要保证它能达到最大值且一直不能高于它设\(dp[i][j][0/1]\)表示前\(i\)个数离达到最大值还需要\(j\)且未/已经达到过最大值。初始化就是\(dp[0][j][j==0]=h[j]\),然......
  • PAT 甲级【1007 Maximum Subsequence Sum】
    本题是考察动态规划与java的快速输入:max[i]表示第i个结尾的最大的连续子串和。bbegin[i]表示第[begin[i],i]为最大和的开始位置超时代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassMain{@Suppres......
  • Codeforces Round 903 (Div. 3) F. Minimum Maximum Distance(图论)
    CodeforcesRound903(Div.3)F.MinimumMaximumDistance思路对标记点更新fg,从0开始进行bfs,更新d1为所有点到0的距离获得到0最远的标记点L,从L开始bfs,更新d2为所有点到L的距离获得距离L最远的标记点R,从R开始bfs,更新d3为所有点到R的距离遍历所有点,这个点与标记点的最大距......
  • Some seqs are too long, please rebuild the program with make parameter MAX_SEQ=n
     001、cd-hit报错如下Someseqsaretoolong,pleaserebuildtheprogramwithmakeparameterMAX_SEQ=new-maximum-length(e.g.makeMAX_SEQ=10000000) 002、解决方法重新编译该软件:(base)[[email protected]]$makeMAX_SEQ=10000000......
  • CF1881F Minimum Maximum Distance
    给定一棵树,树上的一些点被打上了标记,定义一个节点的贡献为其到所有标记节点距离的最大值,求最小贡献。\(n\le2\times10^5\)。这道题的原题是CF337D(甚至要更困难一些)。很套路的换根DP啊。我们考虑设\(f_i\)为\(i\)子树内的标记节点到\(i\)的最大距离,\(g_i\)为子......
  • Maximums and Minimums (CF E)
      思路:分别求出最小区间和最大区间,利用单调zai处理即可然后在利用调和级数,求最小值的倍数 后记:为什么我不2个元素都求一个区间呢?......
  • excel 导出 The maximum length of cell contents (text) is 32767 characters Excel
    excel导出Themaximumlengthofcellcontents(text)is32767characters导出excel功能,报错。错误日志提示::Themaximumlengthofcellcontents(text)is32767characters调查后,poi会有单元格最大长度校验超过32767会报错。需求调研:调研发现,excel和csv文件本身存在......
  • CF1857B Maximum Rounding
    题目大意给定一个自然数\(n\),可以对任意一位进行四舍五入,可以进行任意次,求能得到的最大数。\(n\)的长度不超过\(2\times10^5\),没有前导零。solution首先,选择四舍五入的数一定\(\ge5\),不然对答案没有贡献。其次,高位的数可能会受到低位的进位,这启发我们从低位向高位考虑......
  • 【线段树合并】CF1805E There Should Be a Lot of Maximums 题解
    CF1805E待补:有另解看到维护树上问题,可以想到线段树合并。但直接维护显然不行,要一点技巧。发现\(val\)的出现次数\(cnt_{val}\)如果\(\ge3\),那么一定是一个候选项,若\(cnt_{val}=1\),那么一定不能作为候选项。于是可以用权值线段树维护对于\(val\)有\(cnt_{val}=......
  • [CF762D] Maximum path 题解
    [CF762D]Maximumpath题解想法首先考虑问题的弱化版,如果不能往左走,能取到的最大值是多少。这个问题可以用一个显然的DP解决,\(f_{i,j}\)表示走到第\(i\)列,第\(j\)行,并且不会再访问这一列其它的方格,能取到的最大值。转移可以从三个方向考虑,以\(f_{i,1}\)为例,黑色是当......