解析

完全可以当一道 DP 题而不是模板来做。
首先第一个条件: i∣j=ki|j=ki∣j=k 比较简单,直接上FWT板子即可。
考虑第二个条件:i&j=0i\&j=0i&j=0。若设 ∣x∣|x|∣x∣ 表示二进制下 1 的个数,那么就有: ∣i∣+∣j∣=∣k∣|i|+|j|=|k|∣i∣+∣j∣=∣k∣。
那么考虑设计dp:dpi,jdp_{i,j}dpi,j​ 表示二进制有 iii 个 1,或运算结果为 jjj 的答案。
就有 dpk,i∣j=∑pk∑i,jfp,igk−p,jdp_{k,i|j}=\sum_{p}^k\sum_{i,j}f_{p,i}g_{k-p,j}dpk,i∣j​=p∑k​i,j∑​fp,i​gk−p,j​
然后把 nnn 个 f,gf,gf,g 变换后 n2n^2n2 暴力卷积成答案再变换回去。
总复杂度 O(n22n)O(n^22^n)O(n22n)。

代码

(阴间题卡longlong的常数…)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
const int N=1e6+1e5;
const int mod=1e9+9;int n,lim;
inline int calc(int x){int res(0);while(x){++res;x-=x&-x;}return res;
}
inline void Or(int *x,int lim,int op){for(int l=1;l<lim;l<<=1){for(int st=0;st<lim;st+=l*2){for(int i=0;i<l;i++){if(op==1) (x[st+i+l]+=x[st+i])%=mod;else (x[st+i+l]+=mod-x[st+i])%=mod;}}}return;
}
int A[21][N],B[21][N],C[21][N];
void write(int x){if(x>9) write(x/10);putchar('0'+x%10);return;
}
signed main(){#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);
#endifn=read();lim=(1<<n);for(int i=0;i<lim;i++) A[calc(i)][i]=read();for(int i=0;i<lim;i++) B[calc(i)][i]=read();for(int i=0;i<=n;i++) Or(A[i],lim,1);for(int i=0;i<=n;i++) Or(B[i],lim,1);/*for(int k=0;k<=n;k++){for(int i=0;i<=k;i++){for(int x=0;x<lim;x++) C[k][x]=(C[k][x]+A[i][x]*B[k-i][x])%mod;}        }*/for(int i=0;i<=n;i++){for(int x=0;x<=lim;x++){if(!A[i][x]) continue;for(int j=0;j+i<=n;j++) C[i+j][x]=(C[i+j][x]+1ll*A[i][x]*B[j][x]%mod)%mod;}//debug("%d\n",i);}/*for(int i=0;i<=n;i++){for(int j=0;j<=i;j++){for(int k=0;k<lim;k++) C[i][k]=(C[i][k]+1ll*A[j][k]*B[i-j][k]%mod)%mod;}//debug("%d\n",i);}*/for(int i=0;i<=n;i++) Or(C[i],lim,-1);for(int i=0;i<lim;i++) write(C[calc(i)][i]),putchar(' ');//for(int i=0;i<lim;i++) printf("%d ",C[calc(i)][i]);return 0;
}
/*
*/

洛谷P6097:【模板】子集卷积(FWT)相关推荐

  1. CF914G Sum the Fibonacci(FWT模板+子集卷积)

    title 题目 solution (sa∣sb)&sc&(sd⊕se)=2i,i∈Z;sa&sb=0(s_a|s_b)\&s_c\&(s_d⊕s_e)=2^i ...

  2. 专题·树链剖分【including 洛谷·【模板】树链剖分

    初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...

  3. 洛谷·【模板】点分树 | 震波【including 点分树

    初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...

  4. 洛谷.4245.[模板]任意模数NTT(MTT/三模数NTT)

    题目链接 三模数\(NTT\): 就是多模数\(NTT\)最后\(CRT\)一下...下面两篇讲的都挺明白的. https://blog.csdn.net/kscla/article/details/ ...

  5. 洛谷.4897.[模板]最小割树(Dinic)

    题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...

  6. 强连通分量:洛谷P3387 模板:缩点

    传送门 顾名思义,模板awa #include <cstdio> #include <cstring> #include <cmath> #include < ...

  7. 【后缀数组】洛谷P3809模板题

    题目背景 这是一道模板题. 题目描述 读入一个长度为 n n n 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置. ...

  8. 洛谷 P1919 模板】A*B Problem升级版(FFT快速傅里叶)

    https://www.luogu.com.cn/problem/P1919 题目背景 本题数据已加强,请使用 FFT/NTT,不要再交 Python 代码浪费评测资源. 题目描述 给你两个正整数 a ...

  9. 洛谷 p3372 模板-线段树 1

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个 ...

最新文章

  1. Linux负载均衡软件LVS
  2. netcore 内存限制_[翻译] 使用 Serverless 和 .NET Core 构建飞速发展的架构
  3. 结合领域驱动设计的SOA分布式软件架构
  4. mysql中when用法_Mysql 中的CASE WHEN 用法
  5. abap oo 语法
  6. 《Windows 系列》- 修改hsot
  7. Codevs 1215 迷宫
  8. 算法设计——电路布线问题(动态规划)
  9. 全球(全国)土地利用数据集获取大全/植被类型分布/NDVI数据/NPP数据/径流量数据/降雨量气温气象数据/蒸散量数据/太阳辐射数据
  10. excel教程自学网_收藏!这37个自学网站,一年让你省下十几万
  11. 绩效管理系统(Performance Management System)
  12. 协同OA产品要完全符合企业的办公模式吗?
  13. js的this指向总结
  14. Web安全深度剖析第三章读书笔记
  15. 看漫画学焊接!5分钟教你电烙铁的焊接方法
  16. JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词
  17. 3Dmax对齐轴点到其他对象
  18. ubuntu20.04未找到Wi-Fi适配器
  19. 【科普】单元测试、集成测试、系统测试、验收测试、回归测试、Alpha测试、 Beta测试
  20. 7个资源丰富到爆的搜索网站,没有你找不到的资源!

热门文章

  1. 6段Python代码刻画深度学习历史:从最小二乘法到深度神经网络
  2. android vcard解析代码,Android使用vcard文件的方法简单实例
  3. mysql序列increment_MySQL 序列 AUTO_INCREMENT
  4. java反射 获取局部变量_Java反射:如何获取变量的名称?
  5. makefile obj文件路径_Makefile一问:如何修改.o输出文件的输出路径 Linux/Unix社区 / 程序开......
  6. php 派生类 构造,C++派生类的构造函数和析构函数
  7. 7500 cpuz跑分 i5_核心硬盘 i5 7500性能测试_DIY攒机酷品测试-中关村在线
  8. 2020研究生数学建模结果_关于举办2020年全国研究生数学建模大赛的通知
  9. 算法设计与分析——动态规划——数字三角形问题
  10. int函数在Oracle,vb中int是什么意思 ?