当前的榜一题解,这篇,我认为完全可以撤下。原因如下(我对主要原因进行了加粗):
写题解只是为了纪念,而不是帮助他人
所以写篇板子题的题解纪念一下。
本着这样的态度,他(她)的这篇题解写得实在不行。(为了方便,以下统一用“他”)
表述不清。
对于每一个数,我们找出他的最高位的 1 在第 i 位, 如果此时 Pi 为零,就将这个数加入线性基,否则异或 Pi 继续找。
表述不清是在“否则异或 Pi 继续找”这里。他说“异或 Pi”缺少主语,如果用汉语语法两句话主语不变而省略,那么就是“这个数”为主语,没有问题。即便如此,还是没有说清“异或 Pi”的结果应该存储在哪里。
然后我们就可以在 0 到 k 位上处理好每一位的线性基。这样得到的线性基保证每一位都能有对应的最大值。
题目中没有出现 k,你的前文也没有,那么 k 到底是啥?
我们也是从低到高扫这个数的每一位,如果这第 i 位为 1,就异或上 Pi,然后知道处理到最后一位。如果变成 0 了,那么就是可以的。
如果变成 0 了,那么就是可以的。如果不变成 0 呢?就是不可以的?(显然应该放到线性基数组里)然后就需要直接输出 −1?不可以的后果又是什么?又一个表述不清。
错误
现在的答案为1001010, Pi 为100001,那么异或后答案为1001011,肯定更优;
(1001010)2 异或 (100001)2 是 (1101011)2 好吗!
如果 x1 ^ x1 = x3, 那么 x3 ^ x2 = x1,且 x3 ^ x1 = x2 (可以自己证明一下)
明白的知道你写错了当然不会去证明,不明白的真按你说的去试了试结果根本证不出来。
授人以鱼?为何不授人以渔?
这篇题解只说了“线性基要这么做”,并没有说“线性基为啥是这么做的”,遇到线性基变形的题目,完全就不会做甚至看不出线性基。因此,看完这篇题解,我除了学会这个板子和板子+小改动直接过的题以外没有任何收获。
因此,我很不理解这个题解是怎么被推到榜首的,可能是不少人直接 CV 或者按照他说的打一遍,然后发现又AC了一道蓝题吧。也对,你要是不想学OI只想刷AC数量(或者AC率,因为线性基板子的代码也不很长很好调)的确这篇题解是最快的“捷径”了吧。希望管理能注意一下。