HDU6057 Kanade‘s convolution
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−1C[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
题解
令 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相关推荐
- Octave Convolution卷积
Octave Convolution卷积 MXNet implementation 实现for: Drop an Octave: Reducing Spatial Redundancy in Conv ...
- 转置卷积Transposed Convolution
转置卷积Transposed Convolution 我们为卷积神经网络引入的层,包括卷积层和池层,通常会减小输入的宽度和高度,或者保持不变.然而,语义分割和生成对抗网络等应用程序需要预测每个像素的值 ...
- 详解OpenCV中的Lucas Kanade稀疏光流单应追踪器
详解OpenCV中的Lucas Kanade稀疏光流单应追踪器 1. 效果图 2. 源码 参考 这篇博客将详细介绍OpenCV中的Lucas Kanade稀疏光流单应追踪器. 光流是由物体或相机的运动 ...
- 【Whalepaper】CV论文研读 - Involution内卷:超越Convolution的新算子
Whalepaper是由周郴莲负责的一个每周分享论文的活动,带你研读AI领域的论文,快来一起开源学术科研吧! NLP 论文分享:每周日 晚上 九点 CV 论文分享: 每周日 晚上 九点 Res 论文分 ...
- 卷积Convolution
应该说 基本上所有信号都是以卷积的方式作用于系统. 公式中h(x)是信号经过x作用时间后的权重(或者说衰减系数),变量x是信号到目前为止作用了多长时间(x是时间间隔). 参考:What is a ...
- 【多标签文本分类】Semantic-Unit-Based Dilated Convolution for Multi-Label Text Classification
·阅读摘要: 在本文中,作者基于Seq2Seq模型,提出多级膨胀卷积.混合注意力机制两点来加以改进,应用于多标签文本分类,提高了效果. ·参考文献: [1] Semantic-Unit-Bas ...
- 卷积网络基础知识---Group Convolution分组卷积
Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution https://www.cnblogs.com/s ...
- 卷积网络基础知识---Depthwise Convolution Pointwise Convolution Separable Convolution
https://yinguobing.com/separable-convolution/#fn2 卷积神经网络在图像处理中的地位已然毋庸置疑.卷积运算具备强大的特征提取能力.相比全连接又消耗更少的参 ...
- 视频插值--Video Frame Interpolation via Adaptive Separable Convolution
Video Frame Interpolation via Adaptive Separable Convolution ICCV2017 https://github.com/sniklaus/py ...
最新文章
- 视频中的目标检测与跟踪综述
- 【技术解决方案】RTP_UDP传输过程中数据丢失的解决方案
- 【剑指offer】面试题25:合并两个排序的链表(Java)
- brew 安装软件能指定文件夹吗_Mac下Homebrew安装的软件放在什么地方
- 彻夜怒肝!SpringBoot+Sentinel+Nacos高并发已撸完,快要裂开了!
- 获取字符串全排列 或者 只输出k个的组合
- URLLoader 类和 URLVariables 类
- 51nod 1060 最复杂的数
- 已解决:录屏软件录不了全屏的问题
- sonarqube + nexus 分析项目组成员代码状况,并生成报表
- https://www.cnblogs.com/1995hxt/p/5252098.html 看jar包源码
- SpringCloud 单Eureka简单例子consumer-provider
- 大学生应该读什么书——一位年轻老师给他的年轻学生的一封回信
- Win 10 无法锁屏,快捷键win+L失效
- PHP开发微信提现到银行卡
- 现实迷途 第十三章 三兵一帅
- 打通对账的最后一公里——对账管理平台
- 《项目管理中国式漫画》读后感
- 如何去除搜索引擎上的广告
- solidworks插件打包及简单的注册、解码、混淆、脱壳。