HDU6057 Kanade’s convolution

题目大意

给你两个长度为 2 n − 1 2^n-1 2n−1的数组 A A A和 B B B,计算长度为 2 n − 1 2^n-1 2n−1的数组 C C C

C [ k ] = ∑ i a n d j = k A [ i x o r j ] × B [ i o r j ] C[k]=\sum\limits_{i \ and \ j =k}A[i \ xor \ j]\times B[i \ or \ j] C[k]=i and j=k∑​A[i xor j]×B[i or j]

你需要输出 ∑ i = 0 2 m − 1 C [ i ] × 152 6 i \sum\limits_{i=0}^{2^m-1}C[i]\times 1526^i i=0∑2m−1​C[i]×1526i对 998244353 998244353 998244353取模后的值。

1 ≤ m ≤ 19 , 0 ≤ A [ i ] , B [ i ] < 998244353 1\leq m\leq 19,0\leq A[i],B[i]<998244353 1≤m≤19,0≤A[i],B[i]<998244353

题解

前置知识:快速沃尔什变换( F W T FWT FWT)

令 x = i ⊕ j , y = i ∣ j x=i\oplus j,y=i|j x=i⊕j,y=i∣j,因为 ( i ∣ j ) − ( i & j ) = i ⊕ j (i|j)-(i\& j)=i\oplus j (i∣j)−(i&j)=i⊕j,所以 i & j = ( i ∣ j ) − ( i ⊕ j ) i\&j=(i|j)-(i\oplus j) i&j=(i∣j)−(i⊕j),则

C k = ∑ y − x = k , x & k = 0 2 d x × A x × B y C_k=\sum\limits_{y-x=k,x\& k=0}2^{d_x}\times A_x\times B_y Ck​=y−x=k,x&k=0∑​2dx​×Ax​×By​

其中 d i d_i di​表示 i i i的二进制位中为 1 1 1的位数。

因为对于一对数对 ( x , y ) (x,y) (x,y), x x x的每一个为 1 1 1的位, i , j i,j i,j都有两种选法( i i i这一位为 1 1 1且 j j j这一位为 0 0 0、 i i i这一位为 0 0 0且 j j j这一位为 1 1 1)使 x = i ⊕ j , y = i ∣ j x=i\oplus j,y=i|j x=i⊕j,y=i∣j。所以有 2 d x 2^{d_x} 2dx​对 ( i , j ) (i,j) (i,j)满足上述条件,要乘上 2 d x 2^{d_x} 2dx​。

因为 x = i ⊕ j , y = i ∣ j x=i\oplus j,y=i|j x=i⊕j,y=i∣j,所以 x & y = y x\&y=y x&y=y,可将 y − x = k y-x=k y−x=k换成 y ⊕ x = k y\oplus x=k y⊕x=k。 x & k = 0 x\& k=0 x&k=0也可表示为 d x + d k = d y d_x+d_k=d_y dx​+dk​=dy​。再令 A i = A i × 2 d i A_i=A_i\times 2^{d_i} Ai​=Ai​×2di​,则

C k = ∑ y ⊕ x = k , d x + d k = d y A x × B y C_k=\sum\limits_{y\oplus x=k,d_x+d_k=d_y}A_x\times B_y Ck​=y⊕x=k,dx​+dk​=dy​∑​Ax​×By​

多项式 V ⁣ A i V\!A_i VAi​表示二进制位为 1 1 1的个数为 i i i的 A A A值,多项式 V ⁣ B i V\!B_i VBi​表示二进制位为 1 1 1的个数为 i i i的 B B B值,二进制位为 1 1 1的个数不等于 i i i的数在 V ⁣ A i , V ⁣ B i V\!A_i,V\!B_i VAi​,VBi​中值为 0 0 0。

对于每一个 i i i,对 V ⁣ A i V\!A_i VAi​和 V ⁣ B i V\!B_i VBi​做一次异或卷积的 F W T FWT FWT。令 V k = ∑ j = 0 i ( V ⁣ A j ) k × ( V ⁣ B i − j ) k V_k=\sum\limits_{j=0}^i(V\!A_j)_k\times (V\!B_{i-j})_k Vk​=j=0∑i​(VAj​)k​×(VBi−j​)k​,将 V k V_k Vk​逆变换回来。若 k k k中二进制位为 1 1 1的个数为 i i i,则 C k = V k C_k=V_k Ck​=Vk​。

最后,对于每个 C i C_i Ci​都乘上 152 6 i 1526^i 1526i即可。

时间复杂度为 O ( n log ⁡ 2 n ) O(n\log^2 n) O(nlog2n)。

code

#include<iostream>
#include<cstdio>
using namespace std;
int n,cnt[1<<20];
long long x,ans=0,now=1,ta[22][1<<20],tb[22][1<<20],c[1<<20],v[1<<20];
const int mod=998244353,ny2=499122177;
void fwt(long long *w,int fl){for(int s=2;s<=1<<n;s<<=1){int mid=s>>1;for(int v=0;v<1<<n;v+=s){for(int i=0;i<mid;i++){int t1=w[v+i],t2=w[v+mid+i];w[v+i]=(t1+t2)%mod;w[v+mid+i]=(t1-t2+mod)%mod;if(fl==-1){w[v+i]=1ll*w[v+i]*ny2%mod;w[v+mid+i]=1ll*w[v+mid+i]*ny2%mod;}}}}
}
int main()
{scanf("%d",&n);for(int i=1;i<1<<n;i++) cnt[i]=cnt[i-(i&(-i))]+1;for(int i=0;i<1<<n;i++){scanf("%lld",&x);x=x*(1ll<<cnt[i])%mod;ta[cnt[i]][i]=x;}for(int i=0;i<1<<n;i++){scanf("%lld",&x);tb[cnt[i]][i]=x;}for(int i=0;i<=n;i++){fwt(ta[i],1);fwt(tb[i],1);}for(int i=0;i<=n;i++){for(int j=0;i+j<=n;j++){for(int k=0;k<1<<n;k++){c[k]=(c[k]+1ll*ta[j][k]*tb[i+j][k]%mod)%mod;}}fwt(c,-1);for(int j=0;j<1<<n;j++){if(cnt[j]==i) v[j]=c[j];c[j]=0;}}for(int i=0;i<1<<n;i++){ans=(ans+1ll*v[i]*now%mod)%mod;now=now*1526ll%mod;}printf("%lld\n",ans);return 0;
}

HDU6057 Kanade‘s convolution相关推荐

  1. Octave Convolution卷积

    Octave Convolution卷积 MXNet implementation 实现for: Drop an Octave: Reducing Spatial Redundancy in Conv ...

  2. 转置卷积Transposed Convolution

    转置卷积Transposed Convolution 我们为卷积神经网络引入的层,包括卷积层和池层,通常会减小输入的宽度和高度,或者保持不变.然而,语义分割和生成对抗网络等应用程序需要预测每个像素的值 ...

  3. 详解OpenCV中的Lucas Kanade稀疏光流单应追踪器

    详解OpenCV中的Lucas Kanade稀疏光流单应追踪器 1. 效果图 2. 源码 参考 这篇博客将详细介绍OpenCV中的Lucas Kanade稀疏光流单应追踪器. 光流是由物体或相机的运动 ...

  4. 【Whalepaper】CV论文研读 - Involution内卷:超越Convolution的新算子

    Whalepaper是由周郴莲负责的一个每周分享论文的活动,带你研读AI领域的论文,快来一起开源学术科研吧! NLP 论文分享:每周日 晚上 九点 CV 论文分享: 每周日 晚上 九点 Res 论文分 ...

  5. 卷积Convolution

    应该说   基本上所有信号都是以卷积的方式作用于系统. 公式中h(x)是信号经过x作用时间后的权重(或者说衰减系数),变量x是信号到目前为止作用了多长时间(x是时间间隔). 参考:What is a ...

  6. 【多标签文本分类】Semantic-Unit-Based Dilated Convolution for Multi-Label Text Classification

    ·阅读摘要:   在本文中,作者基于Seq2Seq模型,提出多级膨胀卷积.混合注意力机制两点来加以改进,应用于多标签文本分类,提高了效果. ·参考文献:   [1] Semantic-Unit-Bas ...

  7. 卷积网络基础知识---Group Convolution分组卷积

    Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution https://www.cnblogs.com/s ...

  8. 卷积网络基础知识---Depthwise Convolution Pointwise Convolution Separable Convolution

    https://yinguobing.com/separable-convolution/#fn2 卷积神经网络在图像处理中的地位已然毋庸置疑.卷积运算具备强大的特征提取能力.相比全连接又消耗更少的参 ...

  9. 视频插值--Video Frame Interpolation via Adaptive Separable Convolution

    Video Frame Interpolation via Adaptive Separable Convolution ICCV2017 https://github.com/sniklaus/py ...

最新文章

  1. 视频中的目标检测与跟踪综述
  2. 【技术解决方案】RTP_UDP传输过程中数据丢失的解决方案
  3. 【剑指offer】面试题25:合并两个排序的链表(Java)
  4. brew 安装软件能指定文件夹吗_Mac下Homebrew安装的软件放在什么地方
  5. 彻夜怒肝!SpringBoot+Sentinel+Nacos高并发已撸完,快要裂开了!
  6. 获取字符串全排列 或者 只输出k个的组合
  7. URLLoader 类和 URLVariables 类
  8. 51nod 1060 最复杂的数
  9. 已解决:录屏软件录不了全屏的问题
  10. sonarqube + nexus 分析项目组成员代码状况,并生成报表
  11. https://www.cnblogs.com/1995hxt/p/5252098.html 看jar包源码
  12. SpringCloud 单Eureka简单例子consumer-provider
  13. 大学生应该读什么书——一位年轻老师给他的年轻学生的一封回信
  14. Win 10 无法锁屏,快捷键win+L失效
  15. PHP开发微信提现到银行卡
  16. 现实迷途 第十三章 三兵一帅
  17. 打通对账的最后一公里——对账管理平台
  18. 《项目管理中国式漫画》读后感
  19. 如何去除搜索引擎上的广告
  20. solidworks插件打包及简单的注册、解码、混淆、脱壳。

热门文章

  1. RFID仓库管理系统之售后产品的管理-新导智能
  2. 动画旋转360度位置不变
  3. shell脚本中的export和PWD的作用
  4. python工作目录是什么意思_Docker的工作目录是什么意思?
  5. 黑苹果(i7-4790,华硕B85-plus主板)的过程
  6. Python 两个字典如何实现相加?(相同的键,值相加)
  7. 多线激光雷达+imu的gazebo仿真
  8. 201621123031 《Java程序设计》第4周学习总结
  9. Vue选项式 API 的生命周期选项和组合式 API
  10. Android修改设置文字转语音输出,默认语速