实在是出题人良心的馈赠,将为每位选手的oi之路上平添一份助力。
description
solution:
这道题才是真正的签到题,且题目还保证了(q_i)互不相同
对于第(k)位为1的情况,如果当前的动物中没有这一位为1的,那么这位就必须选0
不妨设有(cnt)位是自由的,那么答案就是(2^{cnt}-n)
注意开(unsigned long long)以及特判(2^{64})的情况
code:
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
const int N=70;
ll a;
int n,m,c,k;
bool flag[N];
inline ll read()
{
ll s=0,w=1; char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-')w=-1;
for(;isdigit(ch);ch=getchar())s=(s<<1)+(s<<3)+(ch^48);
return s*w;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&c,&k);
for(int i=1;i<=n;++i)
{
ll x=read();a|=x;
}
for(int i=1;i<=m;++i)
{
int p,q;scanf("%d%d",&p,&q);
if((!((a>>p)&1))&&(!flag[p]))--k,flag[p]=1;
}
ll ans=0ull;
if(k==64)
{
if(!n)return puts("18446744073709551616"),0;
else ans=18446744073709551615ull,--n;
}
else ans=1ull<<k;
cout<<ans-1ull*n<<endl;
return 0;
}