原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1773.html

题目传送门 - 51Nod1773

题意

  给定一个长度为 $2^n$ 的序列,第 $i$ 项为 $f_{i-1}$ 。

  现在让你做 $T$ 次这样的运算:($i\in[0,2^n)$)

$$f^{\prime}_i=f_i+\sum_{j=0}^{n-1} f_{i\ {\rm XOR} \ 2^j}$$

  输出最终的 $f$ 序列。

题解

  构造转移多项式 $g$ 。使得 $g_0=1,g_{2^i}=1$ 。

  答案为 $f * g^T$ ,其中 $*$ 为异或卷积 。

代码

#include <bits/stdc++.h>
using namespace std;
int read(){
int x=0;
char ch=getchar();
while (!isdigit(ch))
ch=getchar();
while (isdigit(ch))
x=(x<<1)+(x<<3)+ch-48,ch=getchar();
return x;
}
void write(int x){
if (x>9)
write(x/10);
putchar(x%10+'0');
}
const int N=1<<20,mod=1e9+7,inv2=5e8+4;
int n,k,d,a[N],b[N];
int Pow(int x,int y){
int ans=1;
for (;y;y>>=1,x=1LL*x*x%mod)
if (y&1)
ans=1LL*ans*x%mod;
return ans;
}
void FWT(int a[],int n,int flag){
for (int d=1;d<n;d<<=1)
for (int i=0;i<n;i+=(d<<1))
for (int j=0;j<d;j++){
int &L=a[i+j],&R=a[i+j+d];
int x=a[i+j],y=a[i+j+d];
L=x+y;
if (L>=mod)
L-=mod;
R=x-y;
if (R<0)
R+=mod;
if (flag==-1){
L=1LL*L*inv2%mod;
R=1LL*R*inv2%mod;
}
}
}
int main(){
d=read(),k=read(),n=1<<d;
for (int i=0;i<n;i++)
a[i]=read();
memset(b,0,sizeof b);
b[0]=1;
for (int i=0;i<d;i++)
b[1<<i]=1;
FWT(a,n,1),FWT(b,n,1);
for (int i=0;i<n;i++)
a[i]=1LL*a[i]*Pow(b[i],k)%mod;
FWT(a,n,-1);
for (int i=0;i<n;i++)
write(a[i]),putchar(' ');
return 0;
}

  

51Nod1773 A国的贸易 多项式 FWT的更多相关文章

  1. 51nod1773 A国的贸易

    基准时间限制:2 秒 空间限制:524288 KB 分值: 40  A国是一个神奇的国家. 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1. A国的神奇体现在,他们 ...

  2. 【51Nod1773】A国的贸易 解题报告

    [51Nod1773]A国的贸易 Description 给出一个长度为 \(2^n\) 的序列,编号从\(0\)开始.每次操作后,如果 \(i\) 与 \(j\) 的二进制表示只差一位则第 \(i\ ...

  3. [51Nod 1773] A国的贸易

    [51Nod 1773] A国的贸易 题目描述 A国是一个神奇的国家. 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1. A国的神奇体现在,他们有着神奇的贸易规则. ...

  4. 【51Nod1773】A国的贸易 FWT+快速幂

    题目描述 给出一个长度为 $2^n$ 的序列,编号从0开始.每次操作后,如果 $i$ 与 $j$ 的二进制表示只差一位则第 $i$ 个数会加上操作前的第 $j$ 个数.求 $t$ 次操作后序列中的每个 ...

  5. 【51nod】1773 A国的贸易

    题解 FWT板子题 可以发现 \(dp[i][u] = \sum_{i = 0}^{N - 1} dp[i - 1][u xor (2^i)] + dp[i - 1][u]\) 然后如果把异或提出来可 ...

  6. 51NOD 1773:A国的贸易——题解

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1773 参考1:FWT讲解 https://www.cnblogs.com ...

  7. FWT快速沃尔什变换学习笔记

    FWT快速沃尔什变换学习笔记 1.FWT用来干啥啊 回忆一下多项式的卷积\(C_k=\sum_{i+j=k}A_i*B_j\) 我们可以用\(FFT\)来做. 甚至在一些特殊情况下,我们\(C_k=\ ...

  8. [学习笔记]FWT——快速沃尔什变换

    解决涉及子集配凑的卷积问题 一.介绍 1.基本用法 FWT快速沃尔什变换学习笔记 就是解决一类问题: $f[k]=\sum_{i\oplus j=k}a[i]*b[j]$ 基本思想和FFT类似. 首先 ...

  9. [FWT] UOJ #310. 【UNR #2】黎明前的巧克力

    [uoj#310][UNR #2]黎明前的巧克力 FWT - GXZlegend - 博客园 f[i][xor],考虑优化暴力,暴力就是FWT xor一个多项式 整体处理 (以下FWT代表第一步) F ...

随机推荐

  1. ubuntu中文版man

    man默认是英文的,但ubuntu的源里也有中文版的.以下是配置方法: 1)  终端输入sudo apt-get install manpages-zh 2)  安装后修改配置文件sudo gedit ...

  2. Confluence 6 确定一个生产系统备份方案

    Atlassian 推荐创建一个可选的数据库备份方案: 使用你数据库提供的备份和恢复工具 为了避免数据不完整和备份中断,我们推荐你在备份和恢复 Confluence 数据库的时候关闭 Confluen ...

  3. pytorch 参数初始化

    https://blog.csdn.net/daydayjump/article/details/80899029

  4. ipone mac真机调试

    safiri 识别不了iPhone 真机  需要在iPhone上 做设置  safri-> 高级 ->web检查器  进行设置,然后重新启动  safri即可...

  5. yum安装软件内容

    linux  yum源改为阿里yum源 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back ...

  6. strchr()

    strchr()主要有2个最有用的用法: 第一个:搜索字符串在另一字符串中的第一次出现.并返回剩余的部分 $str = "hello_chrdai_1993"; $not_incl ...

  7. 右键菜单添加打开CMD选项

    转载: https://www.cnblogs.com/mkdd/p/8649139.html#undefined 目前用的win7sp1系统,平时打开CMD窗口通常用三种方法:1.win+R然后输入 ...

  8. 论文阅读笔记三十九:Accurate Single Stage Detector Using Recurrent Rolling Convolution(RRC CVPR2017)

    论文源址:https://arxiv.org/abs/1704.05776 开源代码:https://github.com/xiaohaoChen/rrc_detection 摘要 大多数目标检测及定 ...

  9. unicode解码

    var newStr = System.Text.RegularExpressions.Regex.Unescape(str);

  10. Idea和PyCharm激活破解

    1. 先去百度去官网下载专业版IDE, Idea 和PyCharm激活方法一样 2. 下载破解包, 点击下载 3. 将下载的jar包放到这个安装目录的bin目录下面 4. 在bin目录下面的文件pyc ...