码迷,mamicode.com
首页 > 其他好文 > 详细

CF925C

时间:2020-05-31 11:11:18      阅读:65      评论:0      收藏:0      [点我收藏+]

标签: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\),可以通过调整成贪心的排列

CF925C

标签:for   log   big   数组   条件   贪心   mit   lin   limits   

原文地址:https://www.cnblogs.com/Grice/p/12996591.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!