ZR#999
ZR#999
解法:
一道计数题,看到要求必须 $ m $ 个标号,所有标号至少出现一次的方案。
很容易想到可以容斥,但容斥这个东西是一种很神奇的东西,你可以看出来一道题需要容斥,但你就是不知道怎么容斥。原题的等价形式为:总方案减去至少不出现一种玩具的方案数。
考虑容斥 , 那么就有
$ \bigcup ^ {n} _ {i = 1} A_i = \sum ^ {n} _ {k = 1} (-1) ^ {k-1} \sum _ {1 \leq i_1 < i_2 \cdots i_k \leq n} \mid A_{i_1} \cap A_{i_2} \cap \cdots \cap A _ {i_k} \mid $
设 $ f_i $ 表示状态为 $ i $ 时所有元素都在集合 $ i $ 中的方案数。(不要求包含 $ i $ 中的所有元素)然后用容斥原理算一下即可。
但是这个题数据范围比较大,需要用 $ FWT $ (高维前缀和)来维护 。
CODE:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1 << 20
const int p = 1e9 + 7;
int n,m,k,x,res,ans;
int f[N],t[N],cnt[N],flag;
inline int read() {
int x = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch > '9') {if (ch == '-')f = -1; ch = getchar();}
while(ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar();}
return x * f;
}
int main() {
n = read(),m = read();
flag = (1 << m) - 1;
cnt[0] = 1;
for(int i = 1 ; i <= n ; i++) {
k = read();
res = 0;
for(int j = 1 ; j <= k ; j++) {
x = read();
res |= 1 << (x - 1);
}
++f[res];
}
for(int i = 1 ; i <= m ; i++) {
for(int j = 1 ; j <= flag ; j++) {
if(j & (1 << (i - 1)))
f[j] += f[j ^ (1 << (i - 1))];
}
}
for(int i = 1 ; i <= n ; i++) {
cnt[i] = cnt[i - 1] << 1;
if(cnt[i] >= p) cnt[i] -= p;
}
for(int i = 0 ; i <= flag ; i++) {
t[i] = t[i >> 1] + i & 1;
if(!((m - t[i]) & 1)) ans += cnt[f[i]] - 1;
else ans -= cnt[f[i]] - 1;
if(ans >= p) ans %= p;
else if(ans < 0) ans += p;
}
printf("%d \n",ans);
//system("pause");
return 0;
}
ZR#999的更多相关文章
- Error Domain=NSURLErrorDomain Code=-999 “The operation couldn’t be completed.
转:http://www.wangzhengdong.com/blog/error-domainnsurlerrordomain-code-999-the-operation-couldnt-be-c ...
- NSURLErrorDomain -999 "Canceled" 错误探究
完整错误描述为 Error Domain=NSURLErrorDomain Code=-999 "Canceled/已取消" 这个错误一般用来描述某个网络请求在还未被发出时就被意外 ...
- 编写一个Java应用程序,该应用程序包括2个类:Print类和主类E。Print 类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的 立方和等于这个三位数本身,如: 371 = 33 + 73 + 13。)在主类E的main方法中来 测试类Print
package zuoye; public class print { void output() { System.out.println("100-999之间的水仙花数是:") ...
- CodeForces 219B Special Offer! Super Price 999 Bourles!
Special Offer! Super Price 999 Bourles! Time Limit:1000MS Memory Limit:262144KB 64bit IO For ...
- 如何用C#寻找100到999的所有水仙花数?
首先解释一下何为水仙花数:水仙花数只是自幂数的一种,严格来说是三位数的个位.十位.百位的3次幂数相加等于原来的数字,称为水仙花数.(例如:1^3 + 5^3+ 3^3 = 153) 那么如何通过C#语 ...
- 【Atcoder hbpc C 183】1=0.999...
Atcoder hbpc C 题意:给n个循环小数或者有限小数,问其中有多少个互不相同的. 思路:我的思路比较繁琐. 首先我们考虑分数化小数:假设原来的数是\(a.b(c)\),那么这个分数就是\(a ...
- oracle 函数to_char(数据,'FM999,999,999,999,990.00') 格式化数据(转)
转载自:https://blog.csdn.net/fupengyao/article/details/52778565 遇到了oracle 取数格式问题,这里记一下 我们通常在做数据算数后,会想要让 ...
- Leetcode 999. 车的可用捕获量
999. 车的可用捕获量 显示英文描述 我的提交返回竞赛 用户通过次数255 用户尝试次数260 通过次数255 提交次数357 题目难度Easy 在一个 8 x 8 的棋盘上,有一个白色车(r ...
- 寻找并输出11~999之间的回文数m
寻找并输出11~999之间的数m,它满足m.m2和m3均为回文数. 回文:各位数字左右对称的整数. 例如:11满足上述条件 112=121,113=1331 判断一个数是否是回文数的方法:求该数的反序 ...
随机推荐
- 20190705-记IIS发布.NET CORE框架系统之所遇
新手在IIS上发布.NET CORE框架的系统之注意事项 序:本篇随笔是我的处子笔,只想记录自己觉得在系统发布过程中比较重要的步骤,一来,忝作自己的学习笔记,以备不时之需,二来,也希望可以帮助有需要的 ...
- interface Part1(接口详解)
1. 在日常生活中,手机.笔记本电脑.平板电脑等电子产品提供了不同类型的接口用于充电或者连接不同的设备. 不同类型接口的标准不一样,例如电压.尺寸等. 2. 在C#语言中,接口也会定义一种标准,如果需 ...
- flask/app.py-add_url_rule源码分析
之前分析route方法的时候,可以看到中间会调用add_url_rule方法,add_url_rule方法和route方法一样属于Flask这个类的. add_url_rule方法主要用来连接url规 ...
- HTTP协议超级详解
HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数据通信的基础. ...
- 【数字图像处理】gamma变换
论文:gamma校正的快速算法及其c语言实现 gamma变换实现过程 假设图像中有一个像素,值是 200 ,那么对这个像素进行校正必须执行如下步骤: 1. 归一化 :将像素值转换为 0 - 1 之 ...
- html流程实现
https://blog.csdn.net/github_39335046/article/details/73930886 https://www.cnblogs.com/xcj26/p/98707 ...
- DataGrip像navicat一样导入导出表数据,不是导出导入insert和update这种
用的是mysql,其他也一样 首先是导出: 然后: 然后就可以导出了,导出去别的工具能不能拿来导入不知道... 然后是导入: 然后:
- Git与其他VCS的差异
推荐:Git essentials 一共4集视频 对待数据 在对待不同版本数据问题上,分为两派:差异增量.直接快照 增量差异 Git 和其它版本控制系统(包括 Subversion 和近似工具)的主 ...
- Linux常用命令【1】
打包和压缩文件 : cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd ...
- VSCode安装程序——java开发
文章:微软为 Java 开发者推出 VSCode 安装程序 文章介绍微软为VSCode提供了开发程序,方便java开发者更好的使用VSCode