CF925C
Posted grice
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF925C相关的知识,希望对你有一定的参考价值。
题意
对于一个数组A,通过一个变换为B数组:
(B_1=A_1),(B_i=A_ioplus A_{i-1}(iin(1,n]))
现在给定一个B数组,但其已经被打乱了,能否将其重排列满足逆变换后A数组递增
做法
假设B数组已经重排列好了,即(A_k=igopluslimits_{i=1}^k B_i),满足A数组递增即为(forall kin[1,n),igopluslimits_{i=1}^k B_i<igopluslimits_{i=1}^{k+1}B_i)
满足其的充要条件为(forall kin[1,n),B_{k+1})最高位对应在(igopluslimits_{i=1}^k B_i)为(0)
先给出一个做法,后面再说正确性
令集合(S_i)为(B_k)最高位为(i)的元素集合
考虑一个一个元素排列,令(sum)为已经确定的前缀异或和,然后(i=1sim logV)贪心找(S_i)是否合法,若合法随意取一个元素加入排列,然后从(S_i)中移除
正确性:
若有满足条件的重排列(B),可以通过调整成贪心的排列
以上是关于CF925C的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces925C Big Secret 构造贪心