1 条题解
-
0
自动搬运
来自洛谷,原作者为

Alex_Wei
**搬运于
2025-08-24 22:26:26,当前版本为作者最后更新于2020-11-11 18:46:42,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
upd on 2020.11.17:修正一个错误。
先开一个数组 表示是否有 的第 位上是 。
又看到题目中保证 互不相同,所以一旦出现 满足 ,那么这一位就不能选,因为当前买的饲料中必定没有 。
不妨设剩下来 位,那么这 位既可以是 也可以是 ,共有 种动物,减去现有的 种动物即可。
注意要特判 的情况。读入量较大,建议写快读。
此外 数组可以用 unsigned long long 变量代替,这样就做到了时间 ,空间 。
非考场代码:
#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; }
- 1
信息
- ID
- 6259
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者