提交时间:2025-06-08 14:38:23

运行 ID: 37977

#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e6+7; int n,k,C,f[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],o[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++)g[j]=f[i+Pow[p]*j]; if(k==4){ o[2]=f[1]-f[0];o[1]=f[2]-f[3]; o[0]=f[0]-o[1];o[3]=f[3]-o[2]; }else if(k==6){ o[2]=f[1]-f[0];o[3]=f[4]-f[5]; o[5]=f[4]-f[3]+o[2];o[0]=f[1]-f[2]+o[3]; o[1]=f[1]-o[0]-o[2];o[4]-f[4]-f[3]-f[5]; }else if(k==7){ o[2]=f[1]-f[0];o[4]=f[5]-f[6]; o[5]=f[4]-f[3]+o[2];o[1]=f[2]-f[3]+o[4]; o[0]=f[1]-o[2]-o[1];o[6]=f[5]-o[5]-o[4];o[3]=f[3]-o[2]-o[4]; }for(int j=0;j<k;j++)f[i+Pow[p]*j]=o[j]; } } for(int i=0;i<C;i++)cout<<f[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>>f[i]; Init();FWT();return 0; }