RT
算法是把a[i]按位或起来 用bool数组记录每一位有没有对应饲料
最后把两个数组或起来
统计1的个数cnt
ans=2cnt−n
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 1000006
#define MAXM 1000006
#define MAXK 100
using namespace std;
int n,m,c,k;
unsigned long long A,a;
int p,q;
bool book[MAXK];
int readint(){
int x=0;char c;
c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x;
}
unsigned long long readull(){
unsigned long long x=0;char c;
c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x;
}
int main(){
//freopen("zoo.in","r",stdin);
//freopen("zoo.out","w",stdout);
n=readint(),m=readint(),c=readint(),k=readint();
A=1;
for(int i=1;i<=n;++i){
a=readull();
A=A|a;
}
memset(book,1,sizeof(book));
for(int i=1;i<=m;++i){
p=readint(),q=readint();
book[p]=0;
}
unsigned long long cnt=0,ans=0;
for(int i=0;i<k;++i)
if( book[i]|| (A&(1ull<<i)) )
++cnt;
ans=(1ull<<cnt);
ans-=n;
cout<<ans;
fclose(stdin);fclose(stdout);
return 0;
}