#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,m,c,k;
int a[N],p[N],q[N],b[N],sum;
map<bool,bool>vis;
map<bool,bool>y;
void dfs(int x,int p){
if(x==1&&vis[p]) return;
if(p==k){
++sum;
return;
}
dfs(0,p+1);
dfs(1,p+1);
}
int main(){
cin>>n>>m>>c>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>p[i]>>q[i];
vis[p[i]]=1;
}
for(int i=1;i<=n;i++){
memset(b,0,sizeof(b));
int t=a[i],cnt=0;
while(t){
b[cnt]=t%2;
t/=2;
++cnt;
}
for(int j=0;j<k;j++){
if(!vis[j]) continue;
for(int l=1;l<=m;l++){
if(p[l]==j) y[q[l]]=1;
}
}
}
for(int i=0;i<=k;i++){
vis[i]=0;
}
for(int i=1;i<=m;i++){
if(!y[q[i]]) vis[k-p[i]]=1;
}
dfs(0,1);
dfs(1,1);
cout<<sum-n<<endl;
return 0;
}
此代码(纯暴力,样例不过,但是40分,是为什么