【正经题解】动物园
2024-03-18 17:15:39
发布于:浙江
16阅读
0回复
0点赞
先开一个数组 表示是否有 的第位上是。
又看到题目中保证 互不相同,所以一旦出现, 满足 ,那么这一位就不能选,因为当前买的饲料中必定没有。
不妨设剩下来 位,那么这 位既可以是 也可以是 ,共有 种动物,减去现有的种动物即可。
注意等于的情况。
时间复杂度.
#include <bits/stdc++.h>
using namespace std;
#define ull unsigned long long
#define gc getchar()
inline ull rd(){
ull x=0; char s=gc;
while(!isdigit(s))s=gc;
while(isdigit(s))x=(x<<1)+(x<<3)+s-'0',s=gc;
return x;
} ull n,m,c,k,ans,lim,hv;
int main(){
n=rd(),m=rd(),c=rd(),k=rd();
for(int i=1;i<=n;i++)hv|=rd(); // 统计每个位是否有 1
for(int i=1;i<=m;i++)lim|=1ull<<rd(),rd(); // 统计有限制的位
for(int i=0;i<k;i++)ans+=!((lim>>i)&1)||((hv>>i)&1); // 如果当前位有 1, 或者没有限制,那么都可以选
if(ans==64&&!n)puts("18446744073709551616");
else cout<<(ans==64?-n:(1ull<<ans)-n)<<endl;
return 0;
}
这里空空如也
有帮助,赞一个