提交时间:2025-06-08 15:01:13

运行 ID: 37988

#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e6+7; int n,k,C,r[N],Pow[11]; basic_string<int> A[N]; inline void Init(){ Pow[0]=1; for(int i=1;i<=n;i++)Pow[i]=Pow[i-1]*k; for(int i=0;i<C;i++){ int Now=i; for(int j=0;j<n;j++)A[i]+=Now%k,Now/=k; } } inline void FWT(){ static int g[11],f[11]; for(int p=n-1;p>=0;p--){ for(int i=0;i<C;i++){ if(A[i][p]==0){ for(int j=0;j<k;j++)f[j]=r[i+Pow[p]*j]; if(k==4){ g[2]=f[1]-f[0];g[1]=f[2]-f[3]; g[0]=f[0]-g[1];g[3]=f[3]-g[2]; }else if(k==6){ g[2]=f[1]-f[0];g[3]=f[4]-f[5]; g[5]=f[4]-f[3]+g[2];g[0]=f[1]-f[2]+g[3]; g[1]=f[1]-g[0]-g[2];g[4]=f[4]-g[3]-g[5]; }else if(k==7){ g[2]=f[1]-f[0];g[4]=f[5]-f[6]; g[5]=f[4]-f[3]+g[2];g[1]=f[2]-f[3]+g[4]; g[0]=f[1]-g[2]-g[1];g[6]=f[5]-g[5]-g[4];g[3]=f[3]-g[2]-g[4]; }for(int j=0;j<k;j++)r[i+Pow[p]*j]=g[j]; } } } for(int i=0;i<C;i++)cout<<r[i]<<" ";cout<<endl; } signed main(){ #ifndef ONLINE_JUDGE freopen("1.in","r",stdin); freopen("1.out","w",stdout); #endif cin>>n>>k;k++; C=1;for(int i=1;i<=n;i++)C*=k; for(int i=0;i<C;i++)cin>>r[i]; Init(); FWT();return 0; }