标签:for log big 数组 条件 贪心 mit lin limits
对于一个数组A,通过一个变换为B数组:
\(B_1=A_1\),\(B_i=A_i\oplus A_{i-1}(i\in(1,n])\)
现在给定一个B数组,但其已经被打乱了,能否将其重排列满足逆变换后A数组递增
假设B数组已经重排列好了,即\(A_k=\bigoplus\limits_{i=1}^k B_i\),满足A数组递增即为\(\forall k\in[1,n),\bigoplus\limits_{i=1}^k B_i<\bigoplus\limits_{i=1}^{k+1}B_i\)
满足其的充要条件为\(\forall k\in[1,n),B_{k+1}\)最高位对应在\(\bigoplus\limits_{i=1}^k B_i\)为\(0\)
先给出一个做法,后面再说正确性
令集合\(S_i\)为\(B_k\)最高位为\(i\)的元素集合
考虑一个一个元素排列,令\(sum\)为已经确定的前缀异或和,然后\(i=1\sim logV\)贪心找\(S_i\)是否合法,若合法随意取一个元素加入排列,然后从\(S_i\)中移除
正确性:
若有满足条件的重排列\(B\),可以通过调整成贪心的排列
标签:for log big 数组 条件 贪心 mit lin limits
原文地址:https://www.cnblogs.com/Grice/p/12996591.html