题意

题目链接

给出\(n\)个数,问任意选几个数,它们\(\&\)起来等于\(0\)的方案数

Sol

正解居然是容斥原理Orz,然而本蒟蒻完全想不到。。

考虑每一种方案

答案=任意一种方案 - 至少有\(1\)位为\(1\)的方案 + 至少有两位为\(1\)的方案 - 至少有三位为\(1\)的方案

至少有\(i\)位为\(1\)的方案可以dp算,设\(f[x]\)表示满足\(f[x] = a_i \& x = x\)的\(a_i\)的个数

最终答案$ = (-1)^{bit(i)} f[i]$

\(f\)数组可以通过高维前缀和预处理

  1. #include<bits/stdc++.h>
  2. #define Pair pair<int, int>
  3. #define MP make_pair
  4. #define fi first
  5. #define se second
  6. using namespace std;
  7. const int MAXN = 3e6 + 10, mod = 1e9 + 7, B = 20;
  8. inline int read() {
  9. char c = getchar(); int x = 0, f = 1;
  10. while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
  11. while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  12. return x * f;
  13. }
  14. int N, a[MAXN], bit[65537], f[MAXN];
  15. int add(int &x, int y) {
  16. if(x + y < 0) x = x + y + mod;
  17. else x = (x + y >= mod ? x + y - mod : x + y);
  18. }
  19. int mul(int x, int y) {
  20. return 1ll * x * y % mod;
  21. }
  22. int fp(int a, int p) {
  23. int base = 1;
  24. while(p) {
  25. if(p & 1) base = mul(base, a);
  26. a = mul(a, a); p >>= 1;
  27. }
  28. return base;
  29. }
  30. int get1(int x) {
  31. // return __builtin_popcount(x);
  32. return bit[x & 65535] + bit[x >> 16];
  33. }
  34. int main() {
  35. for(int i = 1; i <= 65536; i++) bit[i] = bit[i >> 1] + (i & 1);
  36. N = read();
  37. for(int i = 1; i <= N; i++) a[i] = read(), f[a[i]]++;
  38. int Lim = (1 << B) - 1, ans = 0;
  39. for(int i = 0; i <= 20; i++)
  40. for(int sta = 0; sta <= Lim; sta++)
  41. if(!(sta & (1 << i))) add(f[sta], f[sta | (1 << i)]);
  42. for(int sta = 0; sta <= Lim; sta++) {
  43. int k = (get1(sta) & 1) ? -1 : 1;
  44. add(ans, mul(k, fp(2, f[sta])));
  45. }
  46. cout << ans;
  47. return 0;
  48. }

cf449D. Jzzhu and Numbers(容斥原理 高维前缀和)的更多相关文章

  1. Codeforces 449D Jzzhu and Numbers(高维前缀和)

    [题目链接] http://codeforces.com/problemset/problem/449/D [题目大意] 给出一些数字,问其选出一些数字作or为0的方案数有多少 [题解] 题目等价于给 ...

  2. Codeforces Round #257 (Div. 1) D - Jzzhu and Numbers 容斥原理 + SOS dp

    D - Jzzhu and Numbers 这个容斥没想出来... 我好菜啊.. f[ S ] 表示若干个数 & 的值 & S == S得 方案数, 然后用这个去容斥. 求f[ S ] ...

  3. CF449D Jzzhu and Numbers

    题解 刚刚学习了高维前缀和 这道题就肥肠简单了 高维前缀和其实原理肥肠简单 就是每次只考虑一维,然后只做这一维的前缀和 最后求出的就是总前缀和了 那么对于这道题 也就很简单了 发现选择的所有数每一位都 ...

  4. CF449D Jzzhu and Numbers (状压DP+容斥)

    题目大意: 给出一个长度为n的序列,构造出一个序列使得它们的位与和为0,求方案数 也就是从序列里面选出一个非空子集使这些数按位与起来为0. 看了好久才明白题解在干嘛,我们先要表示出两两组合位与和为0的 ...

  5. Jzzhu and Numbers

    Jzzhu and Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  6. 牛客网 NOIP赛前集训营-普及组(第四场)C--部分和 (高维前缀和)

    传送门 解题思路 高维前缀和模板题.首先,求前缀和有两种方式,比如说对于求二维前缀和来说. 第一种 : for(int i=1;i<=n;i++) for(int j=1;j<=n;j++ ...

  7. Vertex Covers(高维前缀和)

    Vertex Covers 时间限制: 5 Sec  内存限制: 128 MB提交: 5  解决: 3 题目描述 In graph theory, a vertex cover of a graph ...

  8. BZOJ.5092.[Lydsy1711月赛]分割序列(高维前缀和)

    题目链接 \(Description\) \(Solution\) 首先处理\(a_i\)的前缀异或和\(s_i\).那么在对于序列\(a_1,...,a_n\),在\(i\)位置处分开的价值为:\( ...

  9. HDU.5765.Bonds(DP 高维前缀和)

    题目链接 \(Description\) 给定一张\(n\)个点\(m\)条边的无向图.定义割集\(E\)为去掉\(E\)后使得图不连通的边集.定义一个bond为一个极小割集(即bond中边的任意一个 ...

随机推荐

  1. tableView下沉

    出现问题的界面如下,并附有大致介绍: 而我想做的界面应该是自定义的headerView和tableView是一起滑动的,而不是headerView在tableView滑动的时候始终在顶部位置,而且ta ...

  2. 05. flex元素水平垂直居中(三种position水平垂直居中和两种新老版本水平垂直居中)

    flex元素水平垂直居中(三种position水平垂直居中和两种新老版本水平垂直居中) (1).position : <!DOCTYPE html> <html lang=" ...

  3. spider_keeper定时任务

    # Define apscheduler app 下的 __init__.py 文件中, 三个主要函数

  4. selenium+python+unittest:一个类中只执行一次setUpClass和tearDownClass里面的内容(可解决重复打开浏览器和关闭浏览器,或重复登录等问题)

    unittest框架是python自带的,所以直接import unittest即可,定义测试类时,父类是unittest.TestCase. 可实现执行测试前置条件.测试后置条件,对比预期结果和实际 ...

  5. Python爬取LOL英雄皮肤

    Python爬取LOL英雄皮肤 Python 爬虫  一 实现分析 在官网上找到英雄皮肤的真实链接,查看多个后发现前缀相同,后面对应为英雄的ID和皮肤的ID,皮肤的ID从00开始顺序递增,而英雄ID跟 ...

  6. MySql安装错误代码1045的解决方案

    1.MySql安装错误代码1045的解决方案 2.root密码忘记1045的解决方案 错误代码 1045 Access denied for user 'root'@'localhost' (usin ...

  7. 扩展中国剩余定理 exCRT 学习笔记

    前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...

  8. docker编排工具,docker-compose下载与安装

    安装很简单,但是难免会遇到问题:1.安装curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compos ...

  9. Binder Native 层(二)

    Binder 框架及 Native 层 Binder机制使本地对象可以像操作当前对象一样调用远程对象,可以使不同的进程间互相通信.Binder 使用 Client/Server 架构,客户端通过服务端 ...

  10. checkbox 框 选中判断

    function checkAll(checktop){ $(":checkbox[name='id']").prop("checked",checktop.c ...