题目

给出 \(n\) 个数,问有多少个子集的按位与为0


分析

考虑容斥,设 \(f[i]\) 表示有多少个数按位与为 \(x\),满足 \(x\&i=i\)

那么答案就是 \(\sum_{i=0}^{mx}(2^{f[i]}-1)(-1)^{cnt_i}\),这个 \(f\) 直接子集卷起来就可以了


代码

#include <cstdio>
#include <cctype>
using namespace std;
const int N=1000011,mod=1000000007;
int n,two[N],xo[N],c[N],ans,mx;
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
int mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
int main(){
n=iut(),two[0]=1;
for (int i=1;i<=n;++i) two[i]=mo(two[i-1],two[i-1]);
for (int i=1,x;i<=n;++i) x=iut(),++c[x],mx=mx>x?mx:x;
for (int i=1;i<=mx;++i) xo[i]=xo[i&(i-1)]+1;
for (int j=0;j<20;++j)
for (int i=1;i<=mx;++i)
if ((i>>j)&1) c[i^(1<<j)]+=c[i];
for (int i=0;i<=mx;++i)
if (xo[i]&1) ans=mo(ans,mod-two[c[i]]+1);
else ans=mo(ans,two[c[i]]-1);
return !printf("%d",ans);
}

#容斥#51nod 1407 与与与与的更多相关文章

  1. 51Nod 1486 大大走格子 —— 容斥

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1486 对于每个点,求出从起点到它,不经过其他障碍点的方案数: 求一 ...

  2. 51nod 1518 稳定多米诺覆盖(容斥+二项式反演+状压dp)

    [传送门[(http://www.51nod.com/Challenge/Problem.html#!#problemId=1518) 解题思路 直接算不好算,考虑容斥,但并不能把行和列一起加进去容斥 ...

  3. 51nod部分容斥题解

    51nod1434 区间LCM 跟容斥没有关系.首先可以确定的一个结论是:对于任意正整数,有1*2*...*n | (k+1)*(k+2)*...*(k+n).因为这就是$C_{n+k}^{k}$. ...

  4. 51Nod 1439:互质对(用莫比乌斯来容斥)

    有n个数字,a11,a22,…,ann.有一个集合,刚开始集合为空.然后有一种操作每次向集合中加入一个数字或者删除一个数字.每次操作给出一个下标x(1 ≤ x ≤ n),如果axx已经在集合中,那么就 ...

  5. 2 3 5 7的倍数 (51Nod - 1284)[容斥定理]

    20180604 给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N = 10,只有1不是2 3 5 7的倍数. Input 输入1个数N(1 <= N <= 10^1 ...

  6. 51nod 1251 Fox序列的数量 (容斥)

    枚举最多数字的出现次数$k$, 考虑其他数字的分配情况. 对至少$x$种数出现$\ge k$次的方案容斥, 有 $\sum (-1)^x\binom{m-1}{x}\binom{n-(x+1)k+m- ...

  7. 51nod 1486 大大走格子(容斥+dp+组合数)

    传送门 解题思路 暴力容斥复杂度太高,无法接受,考虑用\(dp\).设\(f(i)\)表示从左上角开始不经过前面的阻断点,只经过\(i\)的阻断点.那么可以考虑容斥,用经过\(i\)的总方案数减去前面 ...

  8. 51nod 1355 - 斐波那契的最小公倍数(Min-Max 容斥+莫比乌斯反演)

    vjudge 题面传送门 首先我们知道斐波那契数列的 lcm 是不太容易计算的,但是它们的 gcd 非常容易计算--\(\gcd(f_x,f_y)=f_{\gcd(x,y)}\),该性质已在我的这篇博 ...

  9. 【51nod1355】斐波那契的最小公倍数(min-max容斥)

    [51nod1355]斐波那契的最小公倍数(min-max容斥) 题面 51nod 题解 显然直接算还是没法算的,所以继续考虑\(min-max\)容斥计算. \[lcm(S)=\prod_{T\su ...

  10. 51nod1667-概率好题【容斥,组合数学】

    正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1667 题目大意 两个人. 第一个人有\(k_1\)个集合,第\(i\)个 ...

随机推荐

  1. win32 - PeekNamedPipe的用法

    PeekNamedPipe: 将数据从命名管道或匿名管道复制到缓冲区中,而不将其从管道中删除.它还返回有关管道中数据的信息. 示例: #include <iostream> #includ ...

  2. cmake安装及报错解决办法

    安装 yum install cmake 报错 centOS8(x86_64 或 aarch64) 系统下 yum或dnf 默认安装的 cmake-3.18.2-11.el8版本,安装后无法使用,出现 ...

  3. EF Invalid column name 'Discriminator' Invalid column name 'TagCode'.

    参考资料:Invalid column name 'TagCode'. 该异常和Discriminator没关系,一般原因:1.数据库中字段和实体类字段不一致导致的2.创建新增继承于数据库对应的实体类 ...

  4. 07、Etcd 中Raft算法简介

    本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢. 思考: etcd是如何基于Raft来实现高可用.数据强-致性的? 1.什么是Raft算法 Raft 算法是现在分布式系统开发首选的共识算 ...

  5. 骚操作之 持有 ReadOnlySpan 数据

    ReadOnlySpan<T> 可以说现在高性能操作的重要基石 其原理有兴趣的同学可以看 2018 的介绍Span<T>文章 其为了保障大家安全使用做了相应的限制 那么有没方法 ...

  6. CSRF(Steam的链接不用随便点)

    漏洞详解 CSRF 漏洞原理: 攻击者会冒充或利用用户本人对web服务器发送请求,然而web服务器无法识别该请求是否为用户本人所发送,因此造成各种危害. 漏洞利用过程: 1)首先需要用户登录了上网站, ...

  7. union和union all的区别?

    一. 显示结果不同 union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果集全部显示出来 二.对重复结果的处理不同 union all是直接连接,取到的是所有值,记录可能有的 ...

  8. nginx设置访问账号密码

    第一:为kibana加上了用户登陆访问 第二:不暴露服务器上5601端口,只开放80端口即可.这对服务器的安全也是一个很大的保护. 接下来我们就开始配置nginx与kibana. 一.配置nginx ...

  9. 在.NET程序中整合微软的Playwright,使用 Playwright 的最佳实践和技巧

    Playwright 是一个由 Microsoft 开发的开源工具,用于自动化 Web 浏览器的测试和操作.它提供了一种跨浏览器.跨平台的自动化解决方案,可以在 Chromium.Firefox 和 ...

  10. GPT Prompt

    GPT Prompt 本文总结我关于GPT prompt的一些常用模板和资源. 我常用的模板 大致模板:你是一个怎样的人,我的场景是什么,我想要什么,你需要做什么. 比如: 你是一个经验丰富的前端开发 ...