1. 程式人生 > 其它 >P7076 [CSP-S2020] 動物園

P7076 [CSP-S2020] 動物園

考慮什麼時候不滿足條件。

明顯當選到了需要使用沒有買的飼料時,會引起。

於是只要統計買了的飼料、沒用到的位的總和\(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