NTT FWT(xor or and) 模板
void nnt(int a[],int len,int on)
{
for(int i=;i<len;i++)
if(i<r[i]) swap(a[i],a[r[i]]);
for(int i=;i<len;i<<=) {
int wn=mod_pow(,(mod-)/(i<<));
for(int j=;j<len;j+=(i<<)) {
int w=;
for(int k=;k<i;k++,w=1ll*w*wn%mod) {
int u=a[j+k], v=1ll*w*a[j+k+i]%mod;
a[j+k]=(u+v)%mod, a[j+k+i]=(u-v+mod)%mod;
}
}
}
if(on==-) {
reverse(a+,a+len);
int inv=mod_pow(len,mod-);
for(int i=;i<len;i++)
a[i]=1ll*a[i]*inv%mod;
}
}
NTT
FWT讲解:
https://blog.csdn.net/no_name233/article/details/52824587
https://blog.csdn.net/qq_34454069/article/details/79524001
void fwtXor(int a[],int len,int on)
{
for(int i=;i<len;i++)
if(i<r[i]) swap(a[i],a[r[i]]);
for(int i=;i<len;i<<=)
for(int j=;j<len;j+=(i<<))
for(int k=;k<i;k++){
int u=a[j+k], v=a[j+k+i];
if(on)
a[j+k]=(u+v)%mod, a[j+k+i]=(u-v+mod)%mod;
else
a[j+k]=(u+v)*inv%mod, a[j+k+i]=(u-v+mod)*inv%mod;
}
}
fwtXor
void fwtAnd(int a[],int len,int on)
{
for(int i=;i<n;++i)
if(i<r[i]) swap(a[i],a[r[i]]);
for(int i=;i<len;i<<=)
for(int j=;j<len;j+=(i<<))
for(int k=;k<i;k++) {
int u=a[j+k], v=a[j+k+i];
if(on) a[j+k]=(u+v)%mod, a[j+k+i]=v;
else a[j+k]=(u-v+mod)%mod, a[j+k+i]=v;
}
}
fwtAnd
void fwtOr(int a[],int len,int on)
{
for(int i=;i<n;++i)
if(i<r[i]) swap(a[i],a[r[i]]);
for(int i=;i<len;i<<=)
for(int j=;j<len;j+=(i<<))
for(int k=;k<i;k++) {
int u=a[j+k], v=a[j+k+i];
if(on) a[j+k]=u, a[j+k+i]=(v+u)%mod;
else a[j+k]=u, a[j+k+i]=(v-u+mod)%mod;
}
}
fwtOr
NTT FWT(xor or and) 模板的更多相关文章
- [学习笔记&教程] 信号, 集合, 多项式, 以及各种卷积性变换 (FFT,NTT,FWT,FMT)
目录 信号, 集合, 多项式, 以及卷积性变换 卷积 卷积性变换 傅里叶变换与信号 引入: 信号分析 变换的基础: 复数 傅里叶变换 离散傅里叶变换 FFT 与多项式 \(n\) 次单位复根 消去引理 ...
- $FFT/NTT/FWT$题单&简要题解
打算写一个多项式总结. 虽然自己菜得太真实了. 好像四级标题太小了,下次写博客的时候再考虑一下. 模板 \(FFT\)模板 #include <iostream> #include < ...
- bzoj4589 FWT xor版本
4589: Hard Nim Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 865 Solved: 484[Submit][Status][Disc ...
- 【基础操作】FFT / DWT / NTT / FWT 详解
1. 2. 点值表示法 假设两个多项式相乘后得到的多项式 的次数(最高次项的幂数)为 $n$.(这个很好求,两个多项式的最高次项的幂数相加就得到了) 对于每个点,要用 $O(n)$ 的时间 把 $x$ ...
- 2019牛客多校第一场H XOR 线性基模板
H XOR 题意 给出一组数,求所有满足异或和为0的子集的长度和 分析 n为1e5,所以枚举子集肯定是不可行的,这种时候我们通常要转化成求每一个数的贡献,对于一组数异或和为0.我们考虑使用线性基,对这 ...
- 【洛谷4717】【模板】快速沃尔什变换(FWT模板)
点此看题面 大致题意: 有两个长度为\(2^n\)的数组\(A,B\),且\(C_i=\sum_{j⊕k==i}A_jB_k\)分别求出当\(⊕\)为\(or,and,xor\)时的\(C\)数组. ...
- SDOI2019 省选前模板整理
目录 计算几何✔ DP 斜率优化✔ 四边形不等式✔ 轮廓线DP✘ 各种分治 CDQ分治✔ 点分治✔ 整体二分✔ 数据结构 线段树合并✔ 分块✔ K-D Tree LCT 可持久化Trie✔ Splay ...
- [FWT] UOJ #310. 【UNR #2】黎明前的巧克力
[uoj#310][UNR #2]黎明前的巧克力 FWT - GXZlegend - 博客园 f[i][xor],考虑优化暴力,暴力就是FWT xor一个多项式 整体处理 (以下FWT代表第一步) F ...
- [FFT/NTT/MTT]总结
最近重新学了下卷积,简单总结一下,不涉及细节内容: 1.FFT 朴素求法:$Coefficient-O(n^2)-CoefficientResult$ FFT:$Coefficient-O(nlogn ...
随机推荐
- JAVA 调用c++ 扩展 批评那些垃圾,
//本人喜欢用命令行的方式,这样好理解原理 { 1 生成的要是X64 并且是release版本 不要预编译头的dll项目,就是创建的时是一个空dll项目 2 java 调用时要import com.m ...
- luoguP1415 拆分数列 [dp]
题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输出使得最后一个数最小的同时,字典序最大的解(即先要满足最后一个数最小:如果有多组解,则使得第一个数尽量大:如 ...
- js函数中的apply()、call()、bind()方法
ECMAScript中的函数是对象,因此函数也有属性和方法.每个函数都包含两个属性:length和prototype,且每个函数包含两个非继承而来的方法apply()和call().这两个方法的用途都 ...
- 牛客多校第十场 B Coffee Chicken 递归
题意: 给你一个“斐波那契”字符串数列,第n项由第n-1项和第n-2项拼接而成,输出某项的某位及其后10位. 题解: 递归求解即可. #include<bits/stdc++.h> usi ...
- 数学相关比较 牛顿迭代法求开方 很多个n的平方分之一
牛顿迭代法求开方 牛顿迭代法 作用: 求f(x) = 0 的解 方法:假设任意一点 x0, 求切线与x轴交点坐标x1, 再求切线与x轴交点坐标x2,一直重复,直到f(xn) 与0的差距在一个极小的范围 ...
- 如何在html中添加视频
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="445" heig ...
- nodejs中命令行和node交互模式的区分
来自:廖雪峰教程 么么哒~ 命令行模式和Node交互模式 请注意区分命令行模式和Node交互模式. 看到类似C:\>是在Windows提供的命令行模式: 在命令行模式下,可以执行node进入No ...
- SpringBoot-集成PageHelper5.1.2踩坑
背景就不介绍了,项目是SpringBoot+MyBatis搭建的,需要集成git上的PageHelper5.1.2,这个插件大家都比较熟悉了 之前一直用的PageHelper4.0.3,集成是这样的: ...
- C#枚举转化示例大全,数字或字符串转枚举
本文重点举例说明C#枚举的用法,数字转化为枚举.枚举转化为数字及其枚举数值的判断,以下是具体的示例: 先举两个简单的例子,然后再详细的举例说明: 字符串转换成枚举:DayOfWeek week=(Da ...
- pycharm连接数据库及相应操作
1.连接数据库 2.pycharm中数据库的操作