zoukankan      html  css  js  c++  java
  • 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),可以通过调整成贪心的排列

  • 相关阅读:
    jquery mobile
    可能用到的负边距应用
    兼容性问题
    less和scss
    函数的继承
    关于canvas
    html5表单属性
    html代码
    git 拉取远程分支 --本地分支不存在
    git 删除分支
  • 原文地址:https://www.cnblogs.com/Grice/p/12996591.html
Copyright © 2011-2022 走看看