快速沃尔什变换

用于解决集合逻辑运算的算法。。

就是能够造出类似多项式卷积的形式快速沃尔什变换_第1张图片

⊕可以是 &^|。。。

证明解释什么的。。找了大半天了,也没找到个自己能看懂的,,好吧,,背模板


题面:

给出n个小于2^20的数,指定&^|其中之一为操作opt,求给定的n个数中任选两个,经过opt操作后能得到的最大值是多少???

solution:

记fi:数字i出现的次数+1

令g = f*f,就是上头那张图的形式,对于gi > 1,那么i就是能构造出的数

FWT就理解成和FFT差不多吧,,,,先变换成点值表达式,然后O(n)乘法,然后变回来(此处为口胡)

如何变换???背模板吧,,,

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

const int T = 20;
const int maxn = 1< 1) ans = i;
		cout << ans << endl;
	}
	return 0;
}

你可能感兴趣的:(FWT)