/* HDU 6057 - Kanade's convolution [ FWT ] | 2017 Multi-University Training Contest 3 题意: 给定两个序列 A[0...2^m-1], B[0...2^m-1] 求 C[0...2^m-1] ,满足: C[k] = ∑[i&j==k] A[i^j] * B[i|j] m <= 19 分析: 看C[k]的形式与集合卷积的形式接近,故转化式子时主要向普通的集合卷积式方向靠 与三种位运算都相关的结论是 : i^j…
题解: 然后就是接下来如何fwt 也就是如何处理bit(x) - bit(y) = bit(k)这个条件. 其实就是子集卷积. 把bit(x)和bit(y)划分成两个集合,然后就是子集卷积的形式. 这里设两个新的数组 A[bit(y)][y], B[bit(x)][x],代表拆出来的相应数组 然后对这两个数组做fwt,得到其点值表示,然后直接在外层枚举x和y的大小然后做卷积即可. 这样说可能很抽象,其实贴出代码就很清楚了 #include <iostream> #include <vec…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6057 [题目大意] 有 C[k]=∑_(i&j=k)A[i^j]*B[i|j] 求 Ans=∑ C[i]*1526^i%998244353 [题解] 将C[k]代入Ans的计算式得到 Ans=∑ A[i^j]*B[i|j]*1526^(i&j)%MOD 我们发现(i^j)&(i&j)=0且(i^j)^(i&j)=i|j, 因此bit[i^j]+bit[i&j…
题目链接:HDU-6057 题意: 思路:先按照官方题解推导出下面的式子: 现在唯一的问题就是怎么解决[bit(x)-bit(y)=bit(k)]的问题. 我们定义\( F(A,k)_{i}=\left[ bit\left( i\right) =k\right] * A_{i} \),相当于把A.B.C分别按照bit划分成m+1个序列. 有如下公式: 同时我们发现\( C_k=F(C,bit(k)))_k \). 然后我们就可以搞出来啦! 代码: #include<iostream> #inc…
目录 @0 - 参考资料@ @1 - 异或卷积概念及性质@ @2 - 快速沃尔什正变换(异或)@ @3 - 快速沃尔什逆变换(异或)@ @4 - 与卷积.或卷积@ @5 - 参考代码实现@ @6 - 关于 FMT(快速莫比乌斯变换)@ @7 - 例题与应用@ @dp 优化@ @子集卷积@ @卷积逆运算@ @0 - 参考资料@ yyb 的讲解(FWT) popoqqq 的讲解(FWT) zjp 的讲解(FMT) Dance-Of-Faith 的讲解(FMT) @1 - 异或卷积概念及性质@ 现在已…
ufldl学习笔记与编程作业:Feature Extraction Using Convolution,Pooling(卷积和池化抽取特征) ufldl出了新教程,感觉比之前的好,从基础讲起.系统清晰.又有编程实践. 在deep learning高质量群里面听一些前辈说.不必深究其它机器学习的算法.能够直接来学dl. 于是近期就開始搞这个了.教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 学习链接: http://u…
目录 写在前面 Convolution VS Group Convolution Group Convolution的用途 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 Group Convolution分组卷积,最早见于AlexNet--2012年Imagenet的冠军方法,Group Convolution被用来切分网络,使其在2个GPU上并行运行,AlexNet网络结构如下: Convolution VS Group Convolution 在介绍Gro…
传送门 一道良心的练习FWT和子集卷积的板子-- 具体来说就是先把所有满足\(s_a \& s_b = 0\)的\(s_a \mid s_b\)的值用子集卷积算出来,将所有\(s_a \oplus s_b\)用xor卷积算出来,把斐波那契数代进去,然后将三个数组and卷积,最后取\(2^i (i \in Z)\)的位置的答案的和 #include<bits/stdc++.h> //this code is written by Itst using namespace std; int…
题目:http://codeforces.com/contest/914/problem/G 第一个括号可以子集卷积:第三个括号可以用 FWT 异或卷积:这样算出选两个数组成 x 的方案数:三个部分的方案数分别乘上 f[ x ] 再一起与卷积即可. 注意子集卷积的时候不要改 tp[ i ][ s ] ,因为要的是恰好两个数拼起来,没有改过的(但是做过 FMT 的) tp[ i ][ s ] 存的是初值,表示选 1 个数的方案数. 所以如果可以选任意多个数,就可以像背包一样, tp[ j ][ s…
题目:http://uoj.ac/problem/348 参考:https://www.cnblogs.com/NaVi-Awson/p/9242645.html#%E5%AD%90%E9%9B%86%E5%8D%B7%E7%A7%AF FMT就是快速莫比乌斯变换/反演,解决或卷积的问题,和 FWT 时间复杂度一样. FWT定义了 \( a'[i]=\sum\limits_{j|i=i}a[j] \) ,利用倍增算出 a'[ ] 作为点值,相乘之后再算回去: FMT 也定义了这样的东西,但计算…