CSP 2020 T2 动物园
实在是出题人良心的馈赠,将为每位选手的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;
}
NO PAIN NO GAIN