uoj36 玛里苟斯 高斯消元做法

我的做法从一篇古老的博客学的,好像网上很少。不需要任何特判!

首先当然要算\(a_i\)的范围。

设最高位是\(2^x\),考虑这一位能异或出来的概率。很多方法都能算出来\(\frac{1}{2}\)

所以\(\frac{1}{2}*2^{xk}<2^{63}\) 也就是\(xk<64\)

这样就知道了\(k=1\)的20分做法。每一位概率都是\(\frac{1}{2}\),期望的线性性加起来就好了。

正确的做法也很简单,但是需要一些套路。

首先求线性基,每一个数作为异或和的概率相等,所以直接把原序列换成线性基。

然后把\(x^k\)这个式子展开,按照二进制位。可以算每一项的系数,然后只有概率要求了。

又是一个套路,如果异或方程组有\(m\)个变量,\(n\)个非零行,解的个数就是\(2^{m-n}\)。挺好证的。概率就是\(\frac{1}{2^n}\)

然后就没啥了。我连这都写挂了。。

复杂度O(应该没错) 代码

这个题很类似 先用线性基缩小范围,再高斯消元 所以这玩意还是挺套路的

posted @ 2021-03-05 11:38  yugyppah656  阅读(112)  评论(0编辑  收藏  举报