代码如下:
#include<iostream>
int main()
{
using namespace std;
using ull=unsigned long long;
ull n,m,c,k;
scanf("%llu%llu%llu%llu",&n,&m,&c,&k);
if(n==1&&c==1){
printf("1");
}
ull a=0;
for(int i=0;i<n;i++){
ull x;
scanf("%llu",&x);
a|=x;
}
bool bit[64]={0};
for(int i=k-1;i>=0;i--) bit[i]=(a>>i)&1;
bool no[64]={0};
for(int i=0;i<m;i++){
ull p,q;
scanf("%llu%llu",&p,&q);
if(!bit[p]) no[p]=1;
}
int cnt=0;
for(auto i:no) if(i) cnt++;
ull ans=1ull<<(k-cnt);
if (k - cnt == 64) {
if (n)
cout << ull(-n) << endl;
else
cout << "18446744073709551616" << endl;
} else
cout << (1ull << (k - cnt)) - n << endl;
}
我的ac记录是通过特殊方法弄出来的