在线求助
查看原帖
在线求助
480765
bayerfans楼主2022/10/2 11:09
#include <iostream>
#include <cstring>
#include<set>
unsigned long long pow(int a,int b){
	return 1<<b;
}
using namespace std;
bool f[70];
set<unsigned long long int> s;
long long int sum=0;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	unsigned long long int n,m,c,k;
	cin>>n>>m>>c>>k;
	unsigned long long a[n],b[m][2];
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	for(int i=0;i<n;i++){
		unsigned long long tmp=a[i];
		int s1=0;
		while(tmp){
			if(tmp&1){
				f[s1]=1;
			}
			tmp>>=1;
			s1++;
		}
	}
	for(unsigned int i=0;i<m;i++){
		cin>>b[i][0]>>b[i][1];
		if(f[b[i][0]]){
			s.insert(b[i][1]);
		}
	}
	for(unsigned int i=0;i<m;i++){
		if(!*s.find(b[i][1])){
			s.insert(b[i][1]);
			sum++;
		}
	}
	if(sum==0){
		cout<<pow(2,k)-n;
		return 0;
	}
	cout<<pow(2,k-sum)-n;
	return 0;
}
2022/10/2 11:09
加载中...