题意简述:
现在有([1,c])总共(c)个数,我们要选择(n)个使得任意两个数的异或和不同。
设(k={lceillog_2n
ceil}),保证(n2^kle c)。
数据范围:
(cle2^{24})
解法:
考虑(operatorname{GF}(2^k)),我们可以通过打表/爆搜求出其本原多项式(P(x))。
假如我们现在有两个条件(a+b=c+d,a^3+b^3=c^3+d^3(a
e b,c
e d,a,b,c,dinoperatorname{GF}(2^k)))。
不难证明有(ab=cd)。
此时(a,b,c,d)都是方程(x^2-(a+b)x+ab=0)的根,但是因为该方程只有两根,那么({a,b}={c,d})。
那么(forall iin[1,2^k)),我们将(i2^k+(i^3mod P(x)))加入答案。
由Galois域的相关知识,如果有两对数异或和相等,那么这两对数一定相同。