SNOI2017 遗失的答案
真的一点都不卡啊……
首先这个最大公倍数 明显是诈骗,如果 一定无解,直接判掉。否则我们将 和 都除 : 之所以能直接除 是因为你取出来的数都必须是 的因数。而 中有 个数满足这个条件。
然后问题变为:
从 中取若干数, 次询问,每次查询必须包含 的取数方案,使得 为 并且 为 。
显然我们取的数都是 的因数,于是可以对 质因数分解。假设质数 的次数为 。其次, 的因数最多有 个,记为集合 。
由于 ,并且我们只关心每个数的质因子 次数是否为 或者 ,所以考虑状压。可以对于每个 ,将 的状态表示为一个 位的二进制数:前 位表示每个 的次数是否为 ,后 位表示每个 的次数是否为 。
这一步预处理是 的,写得再臭都能过。
先不考虑 的限制,答案就是取出若干个数,或起来为全集的方案数,将或起来为 的答案设为 。
这是典,考虑容斥:令 为或起来是 的子集的方案数。,于是 。由于答案 为全集,并且 ,所以 。
考虑到 。 为 的数状态表示为 子集的个数,显然可以用 FWT 求出,做一遍子集和即可。
现在考虑有 的限制,改变 的定义为必须选 时,相应的意义。于是 ,即减去不选 的方案。
注意到 仍然成立。所以:
考虑预处理出所有的 ,这东西显然是个超集和,也可以 FWT 做。做完了,复杂度 。
真的一点也不卡常。在 LOJ 上只跑了 143 ms。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话