一个有关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 ...
随机推荐
- sql存储过程中使用 output、nvarchar(max)
1.sql存储过程中使用 output CREATE PROCEDURE [dbo].[P_Max] @a int, -- 输入 @b int, -- 输入 @Returnc int output - ...
- 论一类每次修改log个结点更新的线段树标记方法
楼房重建(BZOJ2957) 多次询问一个区间中大于区间内这个数之前所有数的数的数量. 每个线段树结点维护该节点的答案c和区间内最大值m.假设有函数get(x,cm)=结点x中答案>cm的长度. ...
- matplotlib 入门之Sample plots in Matplotlib
文章目录 Line Plot One figure, a set of subplots Image 展示图片 展示二元正态分布 A sample image Interpolating images ...
- PAT L2-016 愿天下有情人都是失散多年的兄妹
https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216 呵呵.大家都知道五服以内不得通婚,即两个人最 ...
- marMariaDB & MYSQL flexviews
Using Flexviews - part one, introduction to materialized views - Percona Database Performance Bloght ...
- centos安装bundle文件
centos安装VMware-Workstation-Full-*.bundle那点事 | 鳗鱼是条狗https://kinggoo.com/centos-vmware.htm Linux 下 VMW ...
- MYSQL 创建数据库SQL
CREATE DATABASE crm CHARACTER SET utf8 COLLATE utf8_general_ci; MySQL :: MySQL 5.7 Reference Manual ...
- .net WCF WF4.5
花了两天时间学习使用WF,把一些遇到的问题记录下来,使用的环境是VS2017,网上的资料普遍太老了 需要注意,如果使用多项目同时启动的方式需要把WCF调整到WF启动顺序之上 1.怎么使用代码活动 新建 ...
- PyCharm3.0默认快捷键
PyCharm3.0默认快捷键(翻译的) 1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性) Ctrl + Alt + Space 快速导入任意类 Ctrl + S ...
- Laravel Providers——服务提供者的注册与启动源码解析
本文 GitBook 地址: https://www.gitbook.com/book/leoyang90/laravel-source-analysishttps://learnku.com/a ...