[模板]FWT
写起来和fft很像,这里放个板子.
代码:
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<ctime>
- #include<queue>
- #include<map>
- #include<algorithm>
- #include<cstring>
- using namespace std;
- #define duke(i,a,n) for(register int i = a;i <= n;i++)
- #define lv(i,a,n) for(register int i = a;i >= n;i--)
- #define clean(a) memset(a,0,sizeof(a))
- const int INF = << ;
- typedef long long ll;
- typedef double db;
- template <class T>
- void read(T &x)
- {
- char c;
- bool op = ;
- while(c = getchar(), c < '' || c > '')
- if(c == '-') op = ;
- x = c - '';
- while(c = getchar(), c >= '' && c <= '')
- x = x * + c - '';
- if(op) x = -x;
- }
- template <class T>
- void write(T x)
- {
- if(x < ) putchar('-'), x = -x;
- if(x >= ) write(x / );
- putchar('' + x % );
- }
- #define N 1 << 21 | 3
- const int mod = ;
- int lim,base;
- int a[N],b[N],c[N];
- inline int mlt(int x,int y)
- {
- return x * 1ll * y % mod;
- }
- inline int mo(int x,int y)
- {
- if(x + y >= mod) return x + y - mod;
- if(x + y < ) return x + y + mod;
- return x + y;
- }
- inline int d2(int x)
- {
- return (x & ) ? (x + mod) >> : x >> ;
- }
- void fwt(int *a,int d,int op)
- {
- for(int i = ;i < lim;i <<= )
- {
- for(int k = ;k < lim;k += (i << ))
- {
- for(int l = ;l < i;l++)
- {
- if(op == )
- a[k + l + i] = mo(a[k + l + i],d * a[k + l]);
- else if(op == )
- a[k + l] = mo(a[k + l],d * a[k + l + i]);
- else
- {
- int nx = a[k + l],ny = a[k + l + i];
- a[k + l] = mo(nx,ny),a[k + l + i] = mo(nx,-ny);
- if(d == -)
- a[k + l] = d2(a[k + l]),a[k + l + i] = d2(a[k + l + i]);
- }
- }
- }
- }
- }
- int main()
- {
- read(base);
- lim = << base;
- duke(i,,lim - ) read(a[i]);
- duke(i,,lim - ) read(b[i]);
- for(int op = ;op <= ;op ++)
- {
- fwt(a,,op);
- fwt(b,,op);
- for(int i = ;i < lim;i++)
- {
- c[i] = mlt(a[i],b[i]);
- }
- fwt(a,-,op);
- fwt(b,-,op);
- fwt(c,-,op);
- duke(i,,lim - )
- {
- printf("%d ",c[i]);
- }
- puts("");
- }
- return ;
- }
[模板]FWT的更多相关文章
- P4717 【模板】快速沃尔什变换
思路 FWT的模板 FWT解决这样的卷积 \[ C_k=\sum_{i\otimes j=k} A_iB_j \] \(\otimes\)可能是and,or,xor等位运算 几个式子 FWTand: ...
- FWT模板(洛谷P4717 【模板】快速沃尔什变换)(FWT)
洛谷题目传送门 只是一个经过了蛇皮压行的模板... 总结?%%%yyb%%% #include<bits/stdc++.h> #define LL long long #define RG ...
- 【洛谷4717】【模板】快速沃尔什变换(FWT模板)
点此看题面 大致题意: 有两个长度为\(2^n\)的数组\(A,B\),且\(C_i=\sum_{j⊕k==i}A_jB_k\)分别求出当\(⊕\)为\(or,and,xor\)时的\(C\)数组. ...
- 【模板/经典题型】FWT
FWT在三种位运算下都满足FWT(a×b)=FWT(a)*FWT(b) 其中or卷积和and卷积还可以通过FMT实现(本质上就是个高维前缀和) #include<bits/stdc++.h> ...
- Luogu4717 【模板】快速沃尔什变换(FWT)
https://www.cnblogs.com/RabbitHu/p/9182047.html 完全没有学证明的欲望因为这个实在太好写了而且FFT就算学过也忘得差不多了只会写板子 #include&l ...
- 快速沃尔什变换(FWT)学习笔记 + 洛谷P4717 [模板]
FWT求解的是一类问题:\( a[i] = \sum\limits_{j\bigoplus k=i}^{} b[j]*c[k] \) 其中,\( \bigoplus \) 可以是 or,and,xor ...
- NTT FWT(xor or and) 模板
void nnt(int a[],int len,int on) { ;i<len;i++) if(i<r[i]) swap(a[i],a[r[i]]); ;i<len;i<& ...
- FWT模板
代码来自51nod1570 #include<cstdio> #include<cstring> #include<algorithm> #define MN 50 ...
- 洛谷.4717.[模板]快速沃尔什变换(FWT)
题目链接 https://www.mina.moe/archives/7598 //285ms 3.53MB #include <cstdio> #include <cctype&g ...
随机推荐
- ThinkPHP---框架介绍
(1)什么是框架? ①框架是一堆包含了常量.方法和类等代码集合: ②半成品应用,只包含了项目开发时的底层架构,并不包含业务逻辑: ③包含一些设计模式,例如单例模式,工厂模式,AR(Active Rec ...
- 【原】Mysql常用语句
1.修改编码方式为UTF-8 ALTER TABLE 表名 CHANGE 列名 新列名 VARCHAR(255) CHARACTER SET utf8 COLLATE ...
- java中的数学函数Math方法记录
1,三角函数与属性Math.sin() -- 返回数字的正弦值Math.cos() -- 返回数字的余弦值Math.tan() -- 返回数字的正切值Math.asin() -- 返回数字的反正弦值M ...
- 洛谷——P2094 运输
P2094 运输 题目描述 现在已知N件商品,和搬运它们其中每一件的费用.现在搬家公司老板Mr.sb决定让我们每次任意选取2件商品.然后这2件商品只算一件商品的费用.但是这个商品的搬运费用是将选出的2 ...
- ubuntu环境搭建DNS服务器
1 安装bind9 apt install bind9 2 修改 named.conf.local,添加要解析的域名及对应的域名配置文件 zone "test.cn"{ type ...
- 常用的HTTP测试工具谷歌浏览器插件汇总
网页的开发和测试时最常见的测试就是HTTP测试,作为曾经的测试人员在这方面还是略知一二的.其实做网页测试工作是非常繁琐的时期,有时候甚至是无聊重复的,如果没有网页测试工具的帮助的话,测试人员会越做越怀 ...
- Python json & pickle & shelve模块
json & pickle 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇 ...
- Maven_运行时环境
首先,创建一动态web工程. Src-----源码目录 build文件夹在java结构下看不出,但可以在Navigator下可以看出是个源码目录,如下图: 以下图中是运行时环境. 它其实是一组jar包 ...
- java中List遍历删除元素-----不能直接 list.remove()
https://blog.csdn.net/github_2011/article/details/54927531 这是List接口中的方法,List集合调用此方法可以得到一个迭代器对象(Itera ...
- vue.js定义一个一级的路由 ----由浅入深
#### 定义一个路由- 实例化一个路由并设置路由映射表 - 实例化里面第一个参数 routes 路由映射表 - routes 里面参数 - path 路由的路径 - component 路由对应的组 ...