一个有关FWT&FMT的东西
这篇文章在讲什么
相信大家都会FWT和FMT。
如果你不会,推荐你去看一下VFK的2015国家集训队论文。
设全集为\(U=\{1,2,\ldots,n\}\),假设我们关心的\(f_S\)中的集合\(S\)是\(U\)的子集。
给你\(c_i,d_i\),令
\[
b_i=(1+c_ix^{d_i})
\]
求
\[
g=\prod_{i}b_i
\]
其中两个集合幂级数的乘积为集合并卷积(or)/集合对称差卷积(xor)中的一种。
不妨设\(d_S\)互不相同(否则可以用DP/组合数什么的搞一下)。
令
\[
\begin{align}
a_S&=\sum_{d_i=S}c_i\\
f_S&=1+a_Sx^S
\end{align}
\]
暴力做法
对于每一个集合幂级数暴力做一遍FMT/FWT,然后直接乘在一起,再变换回去。
时间复杂度:\(O(n4^n)\)
这个做法太慢了,因为它没有用到本题的特殊条件。
集合或卷积
对于一个集合幂级数\(f\),定义\(f\)的莫比乌斯变换为集合幂级数\(\hat f\),其中
\[
\begin{align}
\hat f_S=\sum_{T\subseteq S}f_T
\end{align}
\]
反过来,定义\(\hat f\)的莫比乌斯反演为\(f\),由容斥原理可以得到
\[
f_S=\sum_{T\subseteq S}{(-1)}^{|S|-|T|}\hat f_T
\]
相信大家都熟悉以上内容。
回到我们要求的那条式子:
\[
\begin{align}
\hat g_T&=\prod_S \hat{f_{S}}_T\\
&=\prod_S \sum_{K\subseteq T}f_{S,K}\\
&=\prod_{S\subseteq T}{(1+a_S)}
\end{align}
\]
是不是发现和普通的莫比乌斯变换很像?
把所有\(a_S\)加上\(1\),把莫比乌斯变换的加法改成乘法,就可以得到\(\hat g_T\)了。
时间复杂度:\(O(n2^n)\)
集合对称差卷积
还是要用到那几条式子。
\[
\begin{align}
\hat g_T&=\prod_S\hat {f_S}_T\\
&=\prod_S\sum_{K}f_{S,K}{(-1)}^{|K\cap T|}\\
&=\prod_S(1+a_S{(-1)}^{|S\cap T|})
\end{align}
\]
这个和沃尔什变换也很像,但是\({(-1)}^{|S\cap T|}\)只乘在了\(a_S\)上面,所以不能把\(a_S\)加\(1\)后做变种沃尔什变换。
但是我们可以再维护一个\(\hat h_T=\prod_S(1-a_S{(-1)}^{|S\cap T|})\),把沃尔什变换中的\(-\hat g_T\)全部换成\(\hat h_T\),就可以做了。
时间复杂度:\(O(n2^n)\)
代码
先坑着
(http://uoj.ac/submission/236983)
一个有关FWT&FMT的东西的更多相关文章
- [学习笔记&教程] 信号, 集合, 多项式, 以及各种卷积性变换 (FFT,NTT,FWT,FMT)
目录 信号, 集合, 多项式, 以及卷积性变换 卷积 卷积性变换 傅里叶变换与信号 引入: 信号分析 变换的基础: 复数 傅里叶变换 离散傅里叶变换 FFT 与多项式 \(n\) 次单位复根 消去引理 ...
- C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)
from:https://blog.csdn.net/poxiaohai2011/article/details/27555951 //C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西 ...
- @总结 - 2@ 位运算卷积/子集卷积 —— FWT/FMT
目录 @0 - 参考资料@ @1 - 异或卷积概念及性质@ @2 - 快速沃尔什正变换(异或)@ @3 - 快速沃尔什逆变换(异或)@ @4 - 与卷积.或卷积@ @5 - 参考代码实现@ @6 - ...
- 【学习笔记】fwt&&fmt&&子集卷积
前言:yyb神仙的博客 FWT 基本思路:将多项式变成点值表达,点值相乘之后再逆变换回来得到特定形式的卷积: 多项式的次数界都为\(2^n\)的形式,\(A_0\)定义为前一半多项式(下标二进制第一位 ...
- 在ASP.NET下做了一个实验MVC的小东西
星期五下班前一时兴起,对MVC发表了一点看法.后来就想干脆弄个小东西来验证一些自己的想法帮组理清思路.所要源代码的免了,3个小时的急就章实在是乱得可以,既没有好的架构,也没有任何代码质量可言,主要是实 ...
- [WC2018]州区划分(状压DP+FWT/FMT)
很裸的子集反演模板题,套上一些莫名其妙的外衣. 先预处理每个集合是否合法,再作显然的状压DP.然后发现可以写成子集反演的形式,直接套模板即可. 子集反演可以看这里. 子集反演的过程就是多设一维代表集合 ...
- 《转》架设一个BLOG需要整合多少东西?
本文转载自大CC 1 Wordpress本身需要花费功夫的地方不多,比较容易,但Themes要花不少功夫调整,有时还得改CSS.推荐几个Wordpress Themes网站: - http://the ...
- 推荐一个IT人必备的东西【用过的都懂,让我们的环境越来越好吧】
有个东西叫IT人手册,不知道各位有用过吗?不过很可惜以前那个关掉了,那个网站说出了我们IT人太多的新声以及一些黑心公司,不过被迫压力下关闭了 我不是托,我只是分享 我觉得这种东西应该存在下去~!!!至 ...
- 贴一个CMemDC 代码,这东西真不错噢,短小精悍,可谓极品
罗索客 发布于 2006-11-28 21:53 点击:3941次 来自: 原文: http://yuantao82.spaces.live.com/Blog/cns!8FC0A772D812A22 ...
随机推荐
- c++ 入门之深入探讨拷贝函数和内存分配
在c++入门之深入探讨类的一些行为时,说明了拷贝函数即复制构造函数运用于如下场景: 对象作为函数的参数,以值传递的方式传给函数. 对象作为函数的返回值,以值的方式从函数返回 使用一个对象给另一个对象初 ...
- iOS数据存储-钥匙串存储
2017.11.20 14:41* 字数 227 阅读 678评论 0喜欢 0 钥匙串介绍 1. 表示设备唯一号的标识,在IOS7中要么被禁止使用,要么重新安装程序后两次获取的标识符不一样. 2. ...
- MySQL Limit优化(转)
原文:http://bbs.landingbj.com/t-0-240894-1.html 首先,我们看一个分页SQL: SELECT time,pageFROM `l_not_200_page`WH ...
- 902. Kth Smallest Element in a BST
Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. You ...
- Oracle pivot行转列函数案例
with temp as( select '湖北省' province,'武汉市' city,'第一' ranking from dual union all select '湖北省' provinc ...
- restful 规范(建议)
需求:开发cmdb,对用户进行管理. 做前后端分离,后端写api(URL),对用户表进行增删改查,应该写四个URL(还要给文档(返回值,返回,请求成功,干嘛,失败,干嘛)),然后分别写视图函数. ht ...
- 关于 ajax
1.type 提交类型 get /post 2.async 默认true 异步 3.cache 默认 true 读取缓存 false不读取缓存 会在请求后面 添加一个时间戳 https://www. ...
- Linux基础学习笔记5-软件管理
包管理器 二进制应用程序的组成部分: 二进制文件.库文件.配置文件.帮助文件 程序包管理器: debian:deb文件.dpkg包管理器 redhat:rpm文件.rpm包管理器 rpm:Redhat ...
- HTML5开发之meta标签的viewport使用说明
随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而每一款手机有不同的分辨率,不同屏幕大 ...
- Spring标签之Bean @Scope
@Bean 的用法 @Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里.添加的bean的id为方法名 定义bean 下面是@Co ...