首页 > 代码库 > FWT
FWT
FWT模板:
1 void FWT(int a[],int n) 2 { 3 for(int d=1;d<n;d<<=1) //你甚至可以RANDOMSHUFFLE 4 for(int m=d<<1,i=0;i<n;i+=m) 5 for(int j=0;j<d;j++) 6 { 7 int x=a[i+j],y=a[i+j+d]; 8 a[i+j]=(x+y)%mod,a[i+j+d]=(x-y+mod)%mod; 9 //xor:a[i+j]=x+y,a[i+j+d]=x-y;10 //and:a[i+j]=x+y; 11 //or:a[i+j+d]=x+y; 12 } 13 } 14 15 void UFWT(int a[],int n) 16 {17 for(int d=1;d<n;d<<=1) //你甚至可以RANDOMSHUFFLE18 for(int m=d<<1,i=0;i<n;i+=m) 19 for(int j=0;j<d;j++) 20 { 21 int x=a[i+j],y=a[i+j+d]; 22 a[i+j]=1LL*(x+y)*rev%mod,a[i+j+d]=(1LL*(x-y)*rev%mod+mod)%mod; 23 //xor:a[i+j]=(x+y)/2,a[i+j+d]=(x-y)/2; 24 //and:a[i+j]=x-y; 25 //or:a[i+j+d]=y-x; 26 } 27 } 28 void solve(int a[],int b[],int n) 29 { 30 FWT(a,n); 31 FWT(b,n); 32 for(int i=0;i<n;i++) a[i]=1LL*a[i]*b[i]%mod; 33 UFWT(a,n); 34 }
FWT
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。