int Pow(int x,int y){ int ans=1; for (;y;y>>=1,x=1LL*x*x%mod) if (y&1) ans=1LL*ans*x%mod; return ans; } void FWT(int a[],int n,int flag){ for (int d=1;d<n;d<<=1) for (int i=0;i<n;i+=(d<<1)) for (int j=0;j<d;j++){ int x=a[i+j],y=a[i+j+d]; a[i+j]=(x+y)%mod; a[i+j+d]=(x-y)%mod; if (flag==-1){ a[i+j]=1LL*a[i+j]*inv2%mod; a[i+j+d]=1LL*a[i+j+d]*inv2%mod; } } } bool check(int x,int n){ for (int i=0;i<n;i++) b[i]=Pow(a[i],x); FWT(b,n,-1); b[v]=(b[v]+mod)%mod; return b[v]>0; }
fwt模板
猜你喜欢
转载自www.cnblogs.com/liweiggg/p/9462707.html
今日推荐
周排行