QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: Sai_tqwq

Posted at: 2025-12-12 19:47:25

Last updated: 2025-12-12 19:48:10

Back to Problem

不会搜索,不会打表

可以做 $T$ 很大的做法,不过搜索似乎也能做。

设 $N=37$。这是答案集合中 $\max$ 的最大值。

发现 $>\lfloor\dfrac{N}{3}\rfloor$ 的所有数取不取不受其他数影响,于是容易想到把所有数分治为两部分分别做。分别把 $>\lfloor\dfrac{N}{3}\rfloor$ 的数和其他数叫做 A 类和 B 类。

在预处理中,我们统计好 A 类数对的贡献。也就是说我们希望寻找一种压位方式来表示 A 类数对 B 类数的限制。注意到如果一个数存在 $>\lfloor\dfrac{N}{3}\rfloor$ 的质因子,那么这个质因子对于 B 类数不构成贡献。换句话说,$1$ 和 $19$ 在某种意义上是等价的。同样的,如果一个数为 $16,25,27$ 的倍数,那么这些多出来的质因子也是无用的。所以我们把互相等价的这些数(一共有 $K=24$ 个)缩在一起,得到 $2^K$ 个不同的等价类。我们维护 A 类数取到了哪些等价类即可。在枚举 B 类数的时候,如果某个数必须要选,那么其所有倍数所在的等价类中被取到的那些的最大公因数正好等于这个数。

然后,预处理完 A 类数的每种选法对应的等价类后,我们再预处理出每种等价类包含的 B 类数的选法个数即可。这部分可以从后往前地 $O(2^KN)$ DP 解决,也就是 $f_{i,S}$ 表示当前选到的等价类为 $S$,还有 $[1,i]$ 中的数要选。判断一个数是不是必选是简单的。

看起来我们得到了一个 $O(2^{\frac{2N}{3}}N+2^KN+TN2^{\frac{N}{3}})$ 的做法,不过还远远没有结束。

我们发现,如果同时选了 $17,29$,那么此时必须选 $1$。但是由于他们属于同一个等价类,会导致我们认为不必须选 $1$。不过好在只有 $1$ 和 $2$ 会出现这种错误,他们涉及到的数分别为 $13,17,19,23,29,31,37$ 和 $26,34$。我们在状态中额外开两位表示这两个集合中分别有没有取至少两个数即可。此时复杂度为 $O(2^{\frac{2N}{3}}N+2^{K+2}N+TN2^{\frac{N}{3}})$。

还有一个非常隐蔽地方会冲突:当我们取了 $13,26$ 时,由于 $26$ 属于 $2$ 这个等价类,会认为此时必须选 $1$,不过实际上并非。这种情况只会出现在新开的两位都不为 $1$、同时取了 $13,26$ 或 $17,34$、并且没有取 $2$ 时会出现。所以只有在 $n$ 相当大时会出现错误,比较难发现。于是我们再新开一位表示有没有同时取 $13,26$ 或者 $17,34$。由于这一位只会在刚才新开的两位都为 $0$ 时出现,此时状态数只会 $\times \dfrac{5}{4}$。总复杂度 $O(2^{\frac{2N}{3}}N+5\times 2^KN+TN2^{\frac{N}{3}})$。可以在没有打表的情况下通过 $T$ 更大的加强版。

搜索打表灭天地,根号分治保平安。

Comments

No comments yet.