CF1622F Quadratic Set
I_am_Accepted
·
·
题解
发现答案一定不小于 n-3。
以下设 B=A-A'。
证明:
\prod\limits_{i=1}^{2k}i! =
2^kk!
\left(\prod\limits_{i=1}^{k}(2i-1)!\right)^2
$n\equiv2\pmod{4}$ 时,取 $B=\{2,\frac{n}{2}\}$ 即可。
$n\equiv1\pmod{2}$ 时,去掉 $n!$ 这项后规模减小 $1$,成为偶数,变为上述两种情况。
注意上面的不一定是最优解。
所以我们先判断 $S=\prod\limits_{i=1}^{n}i!$ 是否为平方数。
若否,则判断是否 $\exists x ,\text{s.t. } \dfrac{S}{x!}$ 是平方数。
若再否,则判断是否 $\exists x,y,\text{s.t. } \dfrac{S}{x!y!}$ 是平方数。
否则,答案 $=n-3$。
由于前面的判断与素因数个数的奇偶性有关,我们想到将素数赋随机 Hash 值,设 $f(x)$ 为 $x$ 分解素因数后每个素因数 Hash 值的异或和(多个相同素因数重复算)。
由于 $a \operatorname{xor} a=0$,$f(x)=0$ 当且仅当 $x$ 是平方数(在很高概率下)。
我们将 $f(x!)(1\le x\le n)$ 存入 `std::map` 匹配即可。
时间 $O(n\log n)$。
[Code](https://codeforces.com/contest/1622/submission/142751564)