传送门

文章目录

  • 题意:
  • 思路:

题意:

思路:

完全想不到容斥啊,看了半天也没看懂渍渍渍。
定义f[i]f[i]f[i]表示iii的超集个数,那么选择的方案就是2f[i]−12^{f[i]}-12f[i]−1了,因为不能一个不选所以要减去空集。
显然f[i]f[i]f[i]可以通过高维前缀和预处理出来,现在考虑如何计算答案。
答案应该包含在f[0]f[0]f[0]内,但是有重复元素,所以考虑容斥来消去,具体的就是ans=∑i=0n(−1)i中1的个数2f[i]−1ans=\sum _{i=0}^{n}(-1)^{i中1的个数}2^{f[i]-1}ans=∑i=0n​(−1)i中1的个数2f[i]−1,转化成人话就是:全部为000的个数−-−至少一个为111的个数+++至少两个为111的个数…

// Problem: D. Jzzhu and Numbers
// Contest: Codeforces - Codeforces Round #257 (Div. 1)
// URL: https://codeforces.com/problemset/problem/449/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=4000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int a[N];
int c[N];LL qmi(LL a,LL b) {LL ans=1;while(b) {if(b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans%mod;
}int get(int x) {int cnt=0;while(x) cnt+=x%2,x/=2;if(cnt&1) return -1;else return 1;
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]),c[a[i]]++;for(int i=0;i<20;i++) {for(int j=0;j<1<<20;j++)if(j>>i&1) {(c[j^(1<<i)]+=c[j])%=mod;}}LL ans=0;for(int i=0;i<1<<20;i++) {ans+=(((qmi(2,c[i])-1)*get(i))%mod+mod)%mod;ans%=mod; }printf("%lld\n",ans);return 0;
}
/**/

Codeforces Round #257 (Div. 1) D. Jzzhu and Numbers 高维前缀和 + 容斥相关推荐

  1. Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences

    B. Jzzhu and Sequences time limit per test 1 second memory limit per test 256 megabytes input standa ...

  2. Codeforces Round #257 (Div. 2) C. Jzzhu and Chocolate

    C. Jzzhu and Chocolate time limit per test 1 second memory limit per test 256 megabytes input standa ...

  3. Codeforces Round #686 (Div. 3) E. Number of Simple Paths 基环树 + 容斥

    传送门 文章目录 题意: 思路: 题意: 给你一颗基环树,求长度>=1>=1>=1的路径个数. 思路: 先考虑一棵树,他的答案显然是n∗(n−1)2\frac{n*(n-1)}{2} ...

  4. Codeforces Round #257 (Div. 2)

    Codeforces Round #257 (Div. 2) https://codeforces.com/contest/450/ A 模拟 1 #include<bits/stdc++.h& ...

  5. Codeforces Round #619 (Div. 2) E. Nanosoft 思维 + 二维前缀和

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑到最大面积是由四种颜色构成的,且四种颜色可以从中心扩展出去,所以我们分别维护四种颜色的二维前缀和,O(1)O(1)O(1)计算矩阵内颜色的个数.现 ...

  6. Codeforces Round #358 (Div. 2) A. Alyona and Numbers 水题

    A. Alyona and Numbers 题目连接: http://www.codeforces.com/contest/682/problem/A Description After finish ...

  7. Codeforces Round #552 (Div. 3) —— A. Restoring Three Numbers

    A. Restoring Three Numbers A.恢复三个数字 time limit per test1 second 每次测试的时间限制1秒 memory limit per test256 ...

  8. Codeforces Round #209 (Div. 2) D. Pair of Numbers (模拟)

    D. Pair of Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. hash+set Codeforces Round #291 (Div. 2) C. Watto and Mechanism

    题目传送门 1 /* 2 hash+set:首先把各个字符串的哈希值保存在set容器里,然后对于查询的每一个字符串的每一位进行枚举 3 用set的find函数查找是否存在替换后的字符串,理解后并不难. ...

最新文章

  1. 【 C 】高级字符串查找之 strspn 和 strcspn 的思考
  2. 50句看后可以变换心情豁然开朗的话
  3. 使用Nexus私服代理其他maven仓库(jitpack、jcenter)
  4. JavaFX官方教程(十五)之A Xylophone.java
  5. Java注释是一个大错误
  6. EclipseLink MOXy作为JAXB提供者
  7. 管理Shader——Shader概览
  8. 大数据之-Hadoop3.x_MapReduce_shuffle机制---大数据之hadoop3.x工作笔记0110
  9. linux之systemctl命令
  10. Servlet — 如何让服务器控制浏览器10秒后跳转到另一个页面
  11. [PYTHON]一个简单的单元測试框架
  12. 基于Unity开发的鼠标打飞碟游戏设计
  13. sxe增加服务器,sXe Injected 反作弊插件
  14. 图的遍历之DSF深度优先算法6.2.1(网络整理)
  15. Android闹钟TimePicker,android – TimePicker getHours(),API 15中的getMinutes
  16. 基于Nginx日志的自动封异常ip和解封脚本
  17. 区分计算机网络和互联网的概念,网络的概念,网络与互联网的区别
  18. 程序员月薪多少才不会焦虑
  19. pytho sockt编程
  20. java pdf模板填充生成pdf打印 (亲测有效)

热门文章

  1. 王道408数据结构——第七章 查找
  2. 飞信linux下载文件,OpenFetion(飞信for Linux)
  3. python字符串创建_在Python上创建完整的字符串
  4. 未检测到正确安装的网络适配器_电脑网络适配器有感叹号怎么解决?
  5. mathwin.top 联系我们_设计:“有目的”的“因果联系”
  6. Oracle常用知识总结
  7. java jar包 平滑重启,nginx 平滑重启的实现方法
  8. 华夫饼为什么不松软_掌握这2个关键点,5个小细节,3个小技巧,保证烙饼松软又好吃...
  9. android宿舍管理系统源码,基于android操作系统的手机宿舍管理系统使用手册
  10. 弱引用什么时候被回收_Java基础 强引用、弱引用、软引用、虚引用