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 判断一个数是否是回文数的方法:求该数的反序 ...
随机推荐
- SQL Server2008分离数据库
1.右击数据库 2.Tasks 3.点击Detach 4.选取Drop Connections-->点击确定 5.开启本地数据库默认存储路径C:\Program Files\Microsoft ...
- Java帖子
IDEA新手使用教程(详解):https://cloud.tencent.com/developer/article/1448115 Java学习文档:https://www.sxt.cn/Java_ ...
- 二、openfeign生成并调用客户端动态代理对象
所有文章 https://www.cnblogs.com/lay2017/p/11908715.html 正文 上一篇文章中,我们了解到了@FeignClient注解的接口被扫描到以后,会生成一个Fe ...
- 移动端隐藏滚动条,css方法
小白第一次发文记录自己遇到的问题. 关于隐藏移动端滚动条方法很多,这里只说本人用到的. 在PC端隐藏html右侧默认滚动条 html { /*隐藏滚动条,当IE下溢出,仍然可以滚动*/ -ms-ove ...
- ReactNative报错null is not an object (evaluating '_rngesturehandlermodule.default.direction')
程序报错: null is not an object (evaluating 'rngesturehandlermodule.default.direction') 解决: react-native ...
- 正则表达式字符&使用
正则详细解说:https://juejin.im/post/5965943ff265da6c30653879 一.正则表达式中的字符含意 \ 做为转义,即通常在"\"后面的字符不按 ...
- ArduPilot存储管理 Storage EEPROM Flash
AP_HAL::Storage 此类可以应用于所有平台.PX4v1平台支持8k的EEPROM,Pixhawk平台支持16k的FRAM铁电存储器 存储大小定义:libraries/AP_HAL/AP_H ...
- 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例
目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...
- Python_for语句
1.for语句: myuser={ 'id':1, 'name':'张三', '语文':98, '数学':99, '英语':40 } for key in myuser: print('学生的'+ke ...
- 使用python控制nginx禁封ip
python控制nginx禁封ip nginx中的access.log最近有大量的用户访问,怎么样屏蔽掉在一定时间段内访问次数多的ip呢? 测试准备: 两个tomcat,一个nginx做均衡负载,服务 ...