区配最大异或
这题看着很蒙,暴力都不会打。。。
——————————————————————————————————————————————
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=(1<<16);
int in[N],n,m;
ll mod=1000000007;
ll dfs(int l,int r){
if(l==r) return 1;
int cnt=0,mid=(l+r)>>1;
for(int i=l;i<=mid;i++){
cnt+=(in[i]==in[i-l+mid+1]);
}
if(cnt==(mid-l+1))
{
return 1ll*2*dfs(l,mid)%mod;
}
if(!cnt){
return 1ll*dfs(l,mid)*dfs(mid+1,r)%mod;
}
return 0;
}
int main(){
scanf("%d%d",&m,&n);
for(int i=0;i<(1<<m);i++){
scanf("%d",&in[i]);
}
printf("%lld",dfs(0,((1<<m)-1))%mod);
}