大意: 给定集合a, 求a的按位与和等于0的非空子集数.

为了方便表述, 把每个数看成一个二进制位表示的集合, 例如十进制的$10$就看做集合$\{1,3\}$.

假设给定数的范围在$[0,2^{m})$内, 记$U=\{0,1,2,\cdots,m-1\}$.

首先根据容斥可以得到

$$ans=\sum\limits_{S\subseteq 2^{U}}(-1)^{|S|}(2^{f_S}-1) \tag{1}$$

其中$f_S=\sum\limits_{T\in a}[T\supseteq S] \tag{2}$

用${cnt}_S$来表示给定每个$S$的出现次数, 就有

$$f_S=\sum\limits_{T\supseteq S} {cnt}_T \tag{3}$$

快速计算$(3)$式其实就是集合交的莫比乌斯变换.

显然可以$O(3^{m})$枚举子集计算, 但是还有$O(m2^{m})$的算法.

记$f_{i,S}$为只考虑前$i$种元素时的$f_{S}$的值

那么就有$$f_{i,S} =   \begin{cases} f_{i-1,S}  & \text{$i\in S$} \\ f_{i-1,S}+f_{i-1,S+\{i\}} & \text{$i\notin S$} \tag{4}\end{cases}$$

初值$f_{-1,S}={cnt}_{S}$, 最终$f_{S}=f_{m-1,S}$, 那么这道题就解决了.

然后再简单推广一下, 考虑与和等于任意值情形, 用容斥可以得到与和为$S$时的答案为

$$h(S)=\sum\limits_{T\supseteq S}(-1)^{|T|-|S|}(2^{f_{T}}-1)\tag{5}$$

若改为或和的情形, 类比与和的求法有

$$f_S=\sum\limits_{T\subseteq S}{cnt}_T \tag{6}$$

然后容斥可以得到

$$h(S)=\sum\limits_{T\subseteq S}(-1)^{|S|-|T|}(2^{f_{T}}-1) \tag{7}$$

其中$(6)$式则是集合并的莫比乌斯变换, 用同样的方法有

$$f_{i,S} =   \begin{cases} f_{i-1,S}  & \text{$i\notin S$} \\ f_{i-1,S}+f_{i-1,S-\{i\}} & \text{$i\in S$} \tag{8}\end{cases}$$

Jzzhu and Numbers CodeForces - 449D (高维前缀和,容斥)的更多相关文章

  1. Codeforces 595B. Pasha and Phone 容斥

    B. Pasha and Phone time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  2. Codeforces Round #258 (Div. 2) 容斥+Lucas

    题目链接: http://codeforces.com/problemset/problem/451/E E. Devu and Flowers time limit per test4 second ...

  3. [SPOJ] DIVCNT2 - Counting Divisors (square) (平方的约数个数前缀和 容斥 卡常)

    题目 vjudge URL:Counting Divisors (square) Let σ0(n)\sigma_0(n)σ0​(n) be the number of positive diviso ...

  4. Codeforces 838A - Binary Blocks(二维前缀和+容斥)

    838A - Binary Blocks 思路:求一下前缀和,然后就能很快算出每一小正方块中1的个数了,0的个数等于k*k减去1的个数,两个的最小值就是要加进答案的值. 代码: #include< ...

  5. Relatively Prime Powers CodeForces - 1036F (莫比乌斯函数容斥)

    Relatively Prime Powers CodeForces - 1036F Consider some positive integer xx. Its prime factorizatio ...

  6. codeforces 678C. Joty and Chocolate(容斥) 2016-10-15 21:49 122人阅读 评论(0) 收藏

    C. Joty and Chocolate time limit per test 1 second memory limit per test 256 megabytes input standar ...

  7. Codeforces.547C.Mike and Foam(容斥/莫比乌斯反演)

    题目链接 \(Description\) 给定n个数(\(1\leq a_i\leq 5*10^5\)),每次从这n个数中选一个,如果当前集合中没有就加入集合,有就从集合中删去.每次操作后输出集合中互 ...

  8. CodeForces - 451E Devu and Flowers (容斥+卢卡斯)

    题意:有N个盒子,每个盒子里有fi 朵花,求从这N个盒子中取s朵花的方案数.两种方法不同当且仅当两种方案里至少有一个盒子取出的花的数目不同. 分析:对 有k个盒子取出的数目超过了其中的花朵数,那么此时 ...

  9. Gym101138D Strange Queries/BZOJ5016 SNOI2017 一个简单的询问 莫队、前缀和、容斥

    传送门--Gym 传送门--BZOJ THUWC2019D1T1撞题可还行 以前有些人做过还问过我,但是我没有珍惜,直到进入考场才追悔莫及-- 设\(que_{i,j}\)表示询问\((1,i,1,j ...

随机推荐

  1. Javassist注解(Annotation)的使用:CXF WebService动态生成

    设计一个对接系统,通过动态模型的增删改触发业务系统相应服务的调用.模型增删改方法动态发布为WebService服务.WebService服务采用CXF发布,动态类生成采用Javassist.由于Web ...

  2. python webdriver 从无到有搭建混合驱动自动化测试框架的过程和总结

    一步一步实现混合驱动自动化测试框架的搭建 混合驱动自动化测试框架,是一个非常高级的框架,非常好用,但也很难,不好掌握,需要多练习,就像搭建数据驱动框架一样,需要自己去一点一点的写,一边搭建一边做思路整 ...

  3. ajax请求头设置 | header 传token

    $('.w-entry-btn').on('tap',function(){ var urlAddress = '/api/address'; var valToken = JSON.parse(lo ...

  4. netty4----日志框架的检查

    https://segmentfault.com/a/1190000005797595 2016年06月25日  ·  4.1k 次阅读 Netty4.x Internal Logger机制 nett ...

  5. 2018 Java线程热门面试题,你知道多少?

    面试,难还是不难?取决于面试者的底蕴(气场+技能).心态和认知及沟通技巧.面试其实可以理解为一场聊天和谈判,在这过程中有心理.思想上的碰撞和博弈.其实你只需要搞清楚一个逻辑:“面试官为什么会这样问?他 ...

  6. 查询oracle数据库里面所有的表名

    如果是当前用户,"select * from tab"即可

  7. C++面向对象高级开发课程(第三周)

    一,类与类之间的关系:继承(Inheritance).复合(Composition).委托(Delegation). 二,复合:表示 is-a ,该设计思想可以参照C语言的 struct . 1. 例 ...

  8. php 设置模式 单元素模式(单例模式或单件模式)

    单元素模式: 某些应用程序资源是独占的,因为有且只有一个此类型的资源.应用程序每次包含且仅包含一个对象,那么这个对象就是一个单元素.指的是在应用程序的范围内只对指定的类创建一个实例.通常该模式中包含一 ...

  9. 调试工具--console用法收藏

    1.使用console进行性能测试和计算代码运行时间:http://www.cnblogs.com/0603ljx/p/4387628.html 2.console命令详解:http://www.cn ...

  10. HDU1698 Just a Hook(线段树&区间覆盖)题解

    Problem Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing for m ...