P4570 [BJWC2011]元素 题解

这道题的解法:贪心+线性基。

由于线性基有一个优秀的性质:无论一个序列的线性基怎么变,其线性基内数的个数都是相同的,关键是看你怎么排列数的顺序,那么我们可以贪心。

考虑将所有石头按照魔力值从大到小排序,然后直接做线性基,能插入的数就加上其魔力值。

对于正确性证明:如果你对于线性基上面这个性质学过证明的话,这个是真的非常好证明的(甚至不用证)。


这里简要证明一下:

假设我们现在有一组线性基 \(d_1,d_2,...,d_k\),现在要插入 \(x\),而 \(x\) 插入失败。

这说明 \(d_{a_1} \oplus d_{a_2} \oplus ... \oplus d_{a_j}=x\)

根据异或的性质:\(x \oplus d_{a_1} \oplus ... \oplus d_{a_{j-1}}=d_{a_j}\)

那么实际上你调整这些数的插入顺序是没有问题的。

证毕。


Code:GitHub CodeBase-of-Plozia P4570 [BJWC2011]元素.cpp

posted @ 2022-04-17 17:58  Plozia  阅读(14)  评论(0编辑  收藏  举报