写起来和fft很像,这里放个板子.

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<ctime>
  5. #include<queue>
  6. #include<map>
  7. #include<algorithm>
  8. #include<cstring>
  9. using namespace std;
  10. #define duke(i,a,n) for(register int i = a;i <= n;i++)
  11. #define lv(i,a,n) for(register int i = a;i >= n;i--)
  12. #define clean(a) memset(a,0,sizeof(a))
  13. const int INF = << ;
  14. typedef long long ll;
  15. typedef double db;
  16. template <class T>
  17. void read(T &x)
  18. {
  19. char c;
  20. bool op = ;
  21. while(c = getchar(), c < '' || c > '')
  22. if(c == '-') op = ;
  23. x = c - '';
  24. while(c = getchar(), c >= '' && c <= '')
  25. x = x * + c - '';
  26. if(op) x = -x;
  27. }
  28. template <class T>
  29. void write(T x)
  30. {
  31. if(x < ) putchar('-'), x = -x;
  32. if(x >= ) write(x / );
  33. putchar('' + x % );
  34. }
  35. #define N 1 << 21 | 3
  36. const int mod = ;
  37. int lim,base;
  38. int a[N],b[N],c[N];
  39. inline int mlt(int x,int y)
  40. {
  41. return x * 1ll * y % mod;
  42. }
  43. inline int mo(int x,int y)
  44. {
  45. if(x + y >= mod) return x + y - mod;
  46. if(x + y < ) return x + y + mod;
  47. return x + y;
  48. }
  49. inline int d2(int x)
  50. {
  51. return (x & ) ? (x + mod) >> : x >> ;
  52. }
  53. void fwt(int *a,int d,int op)
  54. {
  55. for(int i = ;i < lim;i <<= )
  56. {
  57. for(int k = ;k < lim;k += (i << ))
  58. {
  59. for(int l = ;l < i;l++)
  60. {
  61. if(op == )
  62. a[k + l + i] = mo(a[k + l + i],d * a[k + l]);
  63. else if(op == )
  64. a[k + l] = mo(a[k + l],d * a[k + l + i]);
  65. else
  66. {
  67. int nx = a[k + l],ny = a[k + l + i];
  68. a[k + l] = mo(nx,ny),a[k + l + i] = mo(nx,-ny);
  69. if(d == -)
  70. a[k + l] = d2(a[k + l]),a[k + l + i] = d2(a[k + l + i]);
  71. }
  72. }
  73. }
  74. }
  75. }
  76. int main()
  77. {
  78. read(base);
  79. lim = << base;
  80. duke(i,,lim - ) read(a[i]);
  81. duke(i,,lim - ) read(b[i]);
  82. for(int op = ;op <= ;op ++)
  83. {
  84. fwt(a,,op);
  85. fwt(b,,op);
  86. for(int i = ;i < lim;i++)
  87. {
  88. c[i] = mlt(a[i],b[i]);
  89. }
  90. fwt(a,-,op);
  91. fwt(b,-,op);
  92. fwt(c,-,op);
  93. duke(i,,lim - )
  94. {
  95. printf("%d ",c[i]);
  96. }
  97. puts("");
  98. }
  99. return ;
  100. }

[模板]FWT的更多相关文章

  1. P4717 【模板】快速沃尔什变换

    思路 FWT的模板 FWT解决这样的卷积 \[ C_k=\sum_{i\otimes j=k} A_iB_j \] \(\otimes\)可能是and,or,xor等位运算 几个式子 FWTand: ...

  2. FWT模板(洛谷P4717 【模板】快速沃尔什变换)(FWT)

    洛谷题目传送门 只是一个经过了蛇皮压行的模板... 总结?%%%yyb%%% #include<bits/stdc++.h> #define LL long long #define RG ...

  3. 【洛谷4717】【模板】快速沃尔什变换(FWT模板)

    点此看题面 大致题意: 有两个长度为\(2^n\)的数组\(A,B\),且\(C_i=\sum_{j⊕k==i}A_jB_k\)分别求出当\(⊕\)为\(or,and,xor\)时的\(C\)数组. ...

  4. 【模板/经典题型】FWT

    FWT在三种位运算下都满足FWT(a×b)=FWT(a)*FWT(b) 其中or卷积和and卷积还可以通过FMT实现(本质上就是个高维前缀和) #include<bits/stdc++.h> ...

  5. Luogu4717 【模板】快速沃尔什变换(FWT)

    https://www.cnblogs.com/RabbitHu/p/9182047.html 完全没有学证明的欲望因为这个实在太好写了而且FFT就算学过也忘得差不多了只会写板子 #include&l ...

  6. 快速沃尔什变换(FWT)学习笔记 + 洛谷P4717 [模板]

    FWT求解的是一类问题:\( a[i] = \sum\limits_{j\bigoplus k=i}^{} b[j]*c[k] \) 其中,\( \bigoplus \) 可以是 or,and,xor ...

  7. 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<& ...

  8. FWT模板

    代码来自51nod1570 #include<cstdio> #include<cstring> #include<algorithm> #define MN 50 ...

  9. 洛谷.4717.[模板]快速沃尔什变换(FWT)

    题目链接 https://www.mina.moe/archives/7598 //285ms 3.53MB #include <cstdio> #include <cctype&g ...

随机推荐

  1. ThinkPHP---框架介绍

    (1)什么是框架? ①框架是一堆包含了常量.方法和类等代码集合: ②半成品应用,只包含了项目开发时的底层架构,并不包含业务逻辑: ③包含一些设计模式,例如单例模式,工厂模式,AR(Active Rec ...

  2. 【原】Mysql常用语句

    1.修改编码方式为UTF-8 ALTER   TABLE   表名  CHANGE  列名  新列名  VARCHAR(255)    CHARACTER  SET  utf8  COLLATE    ...

  3. java中的数学函数Math方法记录

    1,三角函数与属性Math.sin() -- 返回数字的正弦值Math.cos() -- 返回数字的余弦值Math.tan() -- 返回数字的正切值Math.asin() -- 返回数字的反正弦值M ...

  4. 洛谷——P2094 运输

    P2094 运输 题目描述 现在已知N件商品,和搬运它们其中每一件的费用.现在搬家公司老板Mr.sb决定让我们每次任意选取2件商品.然后这2件商品只算一件商品的费用.但是这个商品的搬运费用是将选出的2 ...

  5. ubuntu环境搭建DNS服务器

    1 安装bind9 apt install bind9 2 修改 named.conf.local,添加要解析的域名及对应的域名配置文件 zone "test.cn"{ type ...

  6. 常用的HTTP测试工具谷歌浏览器插件汇总

    网页的开发和测试时最常见的测试就是HTTP测试,作为曾经的测试人员在这方面还是略知一二的.其实做网页测试工作是非常繁琐的时期,有时候甚至是无聊重复的,如果没有网页测试工具的帮助的话,测试人员会越做越怀 ...

  7. Python json & pickle & shelve模块

    json & pickle 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇 ...

  8. Maven_运行时环境

    首先,创建一动态web工程. Src-----源码目录 build文件夹在java结构下看不出,但可以在Navigator下可以看出是个源码目录,如下图: 以下图中是运行时环境. 它其实是一组jar包 ...

  9. java中List遍历删除元素-----不能直接 list.remove()

    https://blog.csdn.net/github_2011/article/details/54927531 这是List接口中的方法,List集合调用此方法可以得到一个迭代器对象(Itera ...

  10. vue.js定义一个一级的路由 ----由浅入深

    #### 定义一个路由- 实例化一个路由并设置路由映射表 - 实例化里面第一个参数 routes 路由映射表 - routes 里面参数 - path 路由的路径 - component 路由对应的组 ...