题意简述:

现在有\([1,c]\)总共\(c\)个数,我们要选择\(n\)个使得任意两个数的异或和不同。
\(k={\lceil\log_2n\rceil}\),保证\(n2^k\le c\)

数据范围:

\(c\le2^{24}\)

解法:

考虑\(\operatorname{GF}(2^k)\),我们可以通过打表/爆搜求出其本原多项式\(P(x)\)
假如我们现在有两个条件\(a+b=c+d,a^3+b^3=c^3+d^3(a\ne b,c\ne d,a,b,c,d\in\operatorname{GF}(2^k))\)
不难证明有\(ab=cd\)
此时\(a,b,c,d\)都是方程\(x^2-(a+b)x+ab=0\)的根,但是因为该方程只有两根,那么\(\{a,b\}=\{c,d\}\)
那么\(\forall i\in[1,2^k)\),我们将\(i2^k+(i^3\bmod P(x))\)加入答案。
由Galois域的相关知识,如果有两对数异或和相等,那么这两对数一定相同。

相关文章:

  • 2021-12-21
  • 2021-09-28
  • 2021-10-31
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-15
  • 2022-12-23
猜你喜欢
  • 2021-09-18
  • 2022-02-01
  • 2021-06-05
  • 2022-12-23
  • 2021-09-20
  • 2021-10-08
相关资源
相似解决方案