【UOJ 310】【YBT2023寒假Day8 A】黎明前的巧克力 / 计数题(FWT)
黎明前的巧克力 / 计数题
题目链接:UOJ 310 / YBT2023寒假Day8 A
题目大意
给你一些数,然后两个人分别要选一个互相不交的集合(可以有一遍是空集,但是不能两边都空),然后问你有多少种方案使得两个集合的异或和相同。
思路
首先发现异或值相同那异或起来就是 。
那我们可以考虑这么一个东西,就是我们先求它们集合的并集,然后再把集合里面的元素分给它们,那对于大小为 的方案数就是 。
然后我们考虑怎么弄这个东西,不难想到朴素的 DP。
设 表示前 个元素选一些得到异或和为 的贡献。
然后对于每个数,你可以不选,也可以选(选了就是之前的基础上方案 )
然后就是 。
然后这个东西显然可以用 FWT 优化,就是每次乘上一个数组 :在 的位置是 ,在 的位置是 。
但是这样每次都要乘还是不行啊。
接下来就是神奇的地方,我们发现每次乘上的东西很简单,我们考虑能不能从这里下手,然后我们会发现对于 FWT 之后的每一位,它要么是 要么是 。
(因为 下标肯定是全正贡献,然后 的位置可正可负)
那我们如果直接把每个点的 数组加起来会怎样呢?
那众所周知会每个的加起来,那对于每一位,我们得到一个 。
假设 有 个 有 个,就有 。
也就是说我们就可以解方程得到 ,然后乘起来得到把这些 乘起来得到的值!
然后 IFWT 回去我们要的答案就是 啦。
然后因为不能两个都是空集所以最后答案要减一。
代码
__EOF__

本文作者:あおいSakura
本文链接:https://www.cnblogs.com/Sakura-TJH/p/UOJ_310.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Sakura-TJH/p/UOJ_310.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
标签:
FFT / NTT / FWT
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现