本题的大部分题解均没有对关键结论“X 等于所有不在位置上的数按位与起来”进行证明或是给出了完全错误的证明,更有甚者代码与题解阐述内容根本不符。
考虑到本题主要的难点是发现该结论并且证明该结论的正确性,所以请求撤下所有不合要求,对读者有误导性的题解。
为了不被喷飞,斗胆写一个证明:
所有不在位置上的数均至少被操作一次,每次操作的两个数均为 X 的超集,所以 X 的上界是所有不在位置上的数按位与起来;
考虑直接构造方案让 X 取到该上界。任选两个 X 的超集元素 u 和 v:
- 如果 uandv=X,则直接交换 u 和 v;
- 否则 u,v=X,交换 u 和 X,交换 v 和 X,交换 u 和 X。这样就相当于交换了 u 和 v。
综上可以将序列中 X 的超集元素任意重排,也就是一定能将原序列变成有序。