解题思路
题目理解完就比较好做了。。
最多可以多加进 2 k − n 2^k-n 2k−n种动物,但有些位上有限制(要多买饲料),且现在还没有那种饲料,该位置上就不能填。算出k位里有多少位能填,记为cnt,答案为 2 c n t − n 2^cnt-n 2cnt−n
代码
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll unsigned long long
using namespace std;
ll n,m,c,k,x,p,q,cnt,v[100];
ll st,g,ans;
int main(){
scanf("%lld%lld%lld%lld",&n,&m,&c,&k);
if(n==0&&m==0&&k==64)
{
printf("18446744073709551616");
return 0;
}
for(int i=1;i<=n;i++)
{
scanf("%lld",&x);
st|=x;
}
cnt=k;
for(int i=1;i<=m;i++)
{
scanf("%lld%lld",&p,&q);
if(!((st>>p)&1)&&!v[p])
{
v[p]=1;
cnt--;
}
}
ans=1ull<<cnt;
printf("%llu",ans-n);
}