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

  • 相关阅读:
    四则运算02
    第三周学习进度条
    《构建之法》阅读笔记1
    第二周学习进度条
    四则运算01
    第八周进度条
    每日站立会日07,08
    每日站立会议06
    每日站立会议05
    每日站立会议04
  • 原文地址:https://www.cnblogs.com/Grice/p/12996591.html
Copyright © 2011-2022 走看看