考虑什么时候不满足条件。

明显当选到了需要使用没有买的饲料时,会引起。

于是只要统计买了的饲料、没用到的位的总和\(cnt\),这些位珂以随便分配,因为他们怎么取都会满足条件;其余位必须取\(0\)

根据乘法原理,个数为\(2^{cnt}\)。再减去已经有的动物个数即可。注意开\(ull\)

#include<bits/stdc++.h>
using namespace std;
#define int unsigned long long
int n,m,c,k;
unsigned long long mk=0;
int p[1000005];
bool unused[74];
signed main(){
	//freopen("zoo3.in","r",stdin);
	memset(unused,0,sizeof(unused));
	cin>>n>>m>>c>>k;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		mk|=x;
	}
	for(int i=1;i<=m;i++){
		int x;
		cin>>p[i]>>x;
	}
	for(int i=1;i<=m;i++){
		//cout<<(1<<p[i])<<endl;
		if(!(mk&(1ull<<p[i])))unused[p[i]]=1;
	}
	int cnt=0;
	for(int i=0;i<k;i++)if(unused[i])cnt++;
	int cnt2=k-cnt;
	if(cnt2==64&&!n)puts("18446744073709551616");
	else{unsigned long long iee=(1ull/*重要*/<<cnt2);
	cout<<iee-n<<endl;}
	return 0;
} 
YJX AK IOI