【CF908E】New Year and Entity Enumeration(观察,结论)

给定集合 S,考虑其生成集合 S 将会是啥样。

m 个位划分成若干个等价类,使得若 i1,,ik 在同一等价类,对于任意 xSx 的第 i1,,ik 位都是一样的。显然经过取反和按位与之后,原来相等的位置间仍然是相等的,那么刚刚那个条件应该对任意 xS 也成立。

另一方面,假设共有 K 个等价类,我们说明 S 的大小恰为 2K,即任意对每个等价类选取为 0/1 所得到的数都在 S 中。

首先,容易通过取反和按位与构造出按位或(类似 max(x,y)=min(x,y))。然后,通过将 S 中所有第 i 个等价类为 1 的数按位与起来,就能得到一个数,它只有第 i 个等价类为 1 而其他等价类为 0。再通过把若干个这种数按位或起来即可得到任意想要构造的数。

于是 S 的形态只与所有等价类的形态有关。回到原问题,T 相当于已经给出了若干个等价类(称为基础等价类),而我们可以在此基础上对每个等价类划分出更细的等价类,然后得到 S。那么总方案数即为每个基础等价类的集合划分数的乘积。

如何找基础等价类?对每个位在哪些数内为 1 进行状压,哈希值相同的就是同一个等价类。

集合划分数的求法:可以用第二类斯特林数的列和,也可以枚举第一个位所在的等价类大小递推。

posted @   ez_lcw  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示