AT_arc141_d题解报告

这是五年级彩笔账号解封后的第一篇题解,勿喷(如果你没有学过集合的话建议出门右转 oi-wiki)。

题目传送门AT 传送门

\(\text{part.1 题意}\)

有一个值域 \(1\sim 2\times m\),大小为 \(n\) 的集合 \(A\)。求对于集合中的第 \(i\) 个数,求它是否在 \(\sim 2\times m\) 的“好的”子集中。一个集合是好的当且仅当集合内的任意两个整数都不满足整除关系。

\(\text{part.2 抽屉原理}\)

在小奥中,我们知道 \(\{1,2\cdots 2\times m\}\) 的“好的”子集的长度不超过 \(m\),论证也很简单。我们考虑构造 \(m\) 个集合,第 \(i\) 个集合为 \(\{(2i-1)\times2^k\mid 0\le k\wedge(2i-1)\times2^k\le 2\times m\}\)。如果你没看懂上面的表述,当 \(m=5\) 的时候,五个集合形如:

\[\{1,2,4,8\},\\ \{3,6\},\\ \{5,10\},\\ \{7\},\\ \{9\} \]

那么很容易发现,每个集合中的任意两个数满足整除关系,而且这些集合不重叠并包含 \(1\sim2\times m\)。所以 \(\{1,2\cdots 2\times m\}\) 中“好的”子集一定来自于上面划分的不同集合,因此子集的长度不超过 \(m\)。那么这样划分是不是对这道题有用呢?

\(\text{part.3 深挖性质}\)

我们发现,如果随便取 \(m\) 个集合内的数,也会发生整除的情况,例如 \(3\times2^3\mid9\times2^4\)。但是预防着一点很简单,只要保证当 \(a\mid b\) 的时候,\(a\) 所对应的 \(2\) 的指数比 \(b\) 所对应的 \(2\) 的指数大即可。所以说,对于每个 \(A\) 中的元素 \(A_i\),它所对应的 \(2\) 的指数一定是有上下界的,它的下界由它的倍数的下界决定。它的上界由它的因数的上节决定,所以 ——DP!

\(\text{part.4 DP}\)

我们设 \(dp_{i,0/1}\) 表示 \(i\) 对应的 \(2\) 的指数的上 / 下界,就有:

\[dp_{i,0}=\max\{\max_{j\mid i}\{dp_j,0\}+1,dp_{i,0}\}\\ dp_{i,1}=\min\{\min_{i\mid j}\{dp_j,1\}+1,dp_{i,1}\} \]

判断 \(A_i\) 是否在子集中也很简单,判断 \(dp_{A_i,0}\le v_2(A_i)\le dp_{A_i,1}\) 即可。但是……

我们发现,对于不在 \(A\) 内的转移是无效的,所以我们可以将不在 \(A\) 内的 \(dp\) 的选择变得“没那么优”。具体来说,就是让 \(dp_{?,0}\) 变小,\(dp_{?,1}\) 变大,采用 lower_bound 实现。那么就做完了。

代码就不贴了,自行实现。

posted @ 2026-02-02 21:42  tangtianyao0123  阅读(1)  评论(0)    收藏  举报