快速沃尔变换 FWT
P4717 【模板】快速沃尔什变换
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define sc(x) scanf("%lld",&(x));
#define si signed
const int maxn=<<+;
int A[maxn];
int B[maxn];
int C[maxn];
#define mod 998244353
#define inv2 ((mod+1)/2)
int n;
int t;
void FWT_or(int *C,int op)
{
for(int i=;i<n;i<<=){
for(int p=i<<,j=;j<n;j+=p){
for(int k=;k<i;k++){
if(op==)C[i+j+k]=(C[i+j+k]+C[j+k])%mod;
if(op==-)C[i+j+k]=(C[i+j+k]-C[j+k]+mod)%mod;
}
}
}
}
void FWT_and(int *C,int op)
{
for(int i=;i<n;i<<=){
for(int p=i<<,j=;j<n;j+=p){
for(int k=;k<i;k++){
if(op==)C[j+k]=(C[i+j+k]+C[j+k])%mod;
if(op==-)C[j+k]=(C[j+k]+mod-C[i+j+k])%mod;
}
}
}
}
void FWT_xor(int *C,int op)
{
for(int i=;i<n;i<<=){
for(int p=i<<,j=;j<n;j+=p){
for(int k=;k<i;k++){
int x=C[j+k],y=C[i+j+k];
C[j+k]=(x+y)%mod;
C[j+k+i]=(x-y+mod)%mod;
if(op==-){
C[j+k]=C[j+k]*inv2%mod;
C[j+k+i]=C[j+k+i]*inv2%mod;
}
}
}
}
}
si main()
{ sc(t);
n=(<<t);
for(int i=;i<n;i++){
sc(A[i]);
}
for(int i=;i<n;i++){
sc(B[i]);
}
FWT_or(A,);FWT_or(B,);
for(int i=;i<n;i++){
C[i]=(A[i]*B[i])%mod;
}
FWT_or(A,-);FWT_or(B,-);
FWT_or(C,-);
for(int i=;i<n;i++){
cout<<C[i]<<' ';
}
cout<<'\n';
FWT_and(A,);FWT_and(B,);
for(int i=;i<n;i++){
C[i]=(A[i]*B[i])%mod;
}
FWT_and(A,-);FWT_and(B,-);
FWT_and(C,-);
for(int i=;i<n;i++){
cout<<C[i]<<' ';
}
cout<<'\n';
FWT_xor(A,);FWT_xor(B,);
for(int i=;i<n;i++){
C[i]=(A[i]*B[i])%mod;
}
FWT_xor(A,-);FWT_xor(B,-);
FWT_xor(C,-);
for(int i=;i<n;i++){
cout<<C[i]<<' ';
}
cout<<'\n'; }
快速沃尔变换 FWT的更多相关文章
- 集合并卷积的三种求法(分治乘法,快速莫比乌斯变换(FMT),快速沃尔什变换(FWT))
也许更好的阅读体验 本文主要内容是对武汉市第二中学吕凯风同学的论文<集合幂级数的性质与应用及其快速算法>的理解 定义 集合幂级数 为了更方便的研究集合的卷积,引入集合幂级数的概念 集合幂级 ...
- 快速沃尔什变换(FWT) 与 快速莫比乌斯变换 与 快速沃尔什变换公式推导
后面的图片将会告诉: 如何推出FWT的公式tf 如何推出FWT的逆公式utf 用的是设系数,求系数的方法! ============================================== ...
- 知识点简单总结——FWT(快速沃尔什变换),FST(快速子集变换)
知识点简单总结--FWT(快速沃尔什变换),FST(快速子集变换) 闲话 博客园的markdown也太傻逼了吧. 快速沃尔什变换 位运算卷积 形如 $ f[ i ] = \sum\limits_{ j ...
- FFT【快速傅里叶变换】FWT【快速沃尔什变换】
实在是 美丽的数学啊 关于傅里叶变换的博客 讲的很细致 图片非常易于理解http://blog.jobbole.com/70549/ 大概能明白傅里叶变换是干吗的了 但是还是不能明白为什么用傅里叶变换 ...
- 快速沃尔什变换&快速莫比乌斯变换小记
u1s1 距离省选只剩 5 days 了,现在学新算法真的合适吗(( 位运算卷积 众所周知,对于最普通的卷积 \(c_i=\sum\limits_{j+k=i}a_jb_k\),\(a_jb_k\) ...
- 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换
写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!!一.傅立叶变换的由来关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶 ...
- 离散傅立叶变换与快速傅立叶变换(DFT与FFT)
自从去年下半年接触三维重构以来,听得最多的词就是傅立叶变换,后来了解到这个变换在图像处理里面也是重点中的重点. 本身自己基于高数知识的理解是傅立叶变换是将一个函数变为一堆正余弦函数的和的变换.而图像处 ...
- 快速傅里叶变换 & 快速数论变换
快速傅里叶变换 & 快速数论变换 [update 3.29.2017] 前言 2月10日初学,记得那时好像是正月十五放假那一天 当时写了手写版的笔记 过去近50天差不多忘光了,于是复习一下,具 ...
- 快速傅立叶变换(FFT)算法
已知多项式f(x)=a0+a1x+a2x2+...+am-1xm-1, g(x)=b0+b1x+b2x2+...+bn-1xn-1.利用卷积的蛮力算法,得到h(x)=f(x)g(x),这一过程的时间复 ...
随机推荐
- mysql for update 高并发 死锁研究
mysql for update语句 https://www.cnblogs.com/jtlgb/p/8359266.html For update带来的思考 http://www.cnblo ...
- JS判断当前页面是在 QQ客户端/微信客户端/iOS浏览器/Android浏览器/PC客户端
browser.js var browser = { versions: function () { var u = navigator.userAgent, app = navigator.appV ...
- 一道并发和锁的golang面试题
今天面试golang碰到了一道考并发和锁的题目,没有完成,所以把它记录下来,仅为以后复习. 场景:在一个高并发的web服务器中,要限制IP的频繁访问.现模拟100个IP同时并发访问服务器,每个IP要重 ...
- sqlite3中 timestamp使用
timestamp使用 一. timestamp两种属性:自动初始化: 此行为只在第一次写入数据时,怎么把时间设为当前时间. (DEFAULT CURRENT_TIMESTAMP)自动更新: 此行为在 ...
- 一道有关#define的题
题目是:查看以下代码,问结果是什么? 结果是打印出“array:16345678910”吗? #include "stdafx.h" #include <iostream&g ...
- html 自动跳转页面
三种简单的html网页自动跳转方法,可以让你在打开一个html网页时自动跳转到其它的页面. 方法一. <html> <head> <meta http-equiv=&qu ...
- 第一节,搭建openwrt开发环境
一,安装VMware虚拟机或者VirtualBox虚拟机 安装过程就不在此赘述了.附上百度搜索来的链接,供大家参考. https://baijiahao.baidu.com/s?id=16233731 ...
- MapReduce计数程序(自主复习)
1.MyWordCount类 注意: 1.本机+测试,两个注释都放开 2.本机跑集群,要开异构平台为true 3.集群跑,把两个注释都注起来,然后在集群上面跑 package com.littlepa ...
- Educational Codeforces Round 77 比赛总结
比赛情况 我太菜了 A题 加减乘除不会 B题 二元一次方程不会 C题 gcd不会 就会一个D题二分答案大水题,本来想比赛最后一分钟来一个绝杀,结果 Wrong Answer on test 4 比赛总 ...
- Maven灵活构建(转载)
https://blog.csdn.net/sin90lzc/article/details/7552033