题面

题解

将无序化为有序,最后答案除以$m!$。

设$f[i]$表示选出了$i$个子集,并且满足所有的限制的方案数。

因为转移困难,所以考虑容斥

  1. 限制了每个数的出现次数为偶数,所以如果前$i - 1$个子集是确定的,第$i$个的选择唯一,

    一定是前面选了奇数次的元素的集合。

    所以如果没有其他限制的情况下,选出$i$个自己的方案数为$A_{2^n-1}^{i-1}$

  2. 然后减去第$i$个集合为空的情况,方案数为$f[i-1]$

  3. 然后减去第$i$个集合与之前某个子集相同的情况。

    如果将这两个相同的集合删去,剩下的集合一定合法,方案数为$f[i-2]$。

    又第$i$个子集有$2^n-1-(i-2)$种方案,同时和第$i$个子集相同的集合的位置有$i-1$种,

    所以方案数为$f[i-2]\times(i-1)\times(2^n-1-(i-2))$

所以转移为

$$ f[i]=A_{2^n-1}^{i-1}-f[i-1]-(f[i-2]\times(i-1)\times(2^n-1-(i-2))) $$

边界$f[0]=1,f[1]=0$

真毒瘤

代码

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define RG register
#define file(x) freopen(#x".in", "r", stdin);freopen(#x".out", "w", stdout);
#define clear(x, y) memset(x, y, sizeof(x)) const int maxn(1000010), Mod(100000007);
int n, m, f[maxn], Inv, A[maxn], Pow; int fastpow(int x, int y)
{
int ans = 1;
while(y)
{
if(y & 1) ans = 1ll * ans * x % Mod;
x = 1ll * x * x % Mod, y >>= 1;
}
return ans;
} int main()
{
scanf("%d%d", &n, &m);
f[0] = A[0] = Inv = 1;
for(RG int i = 2; i <= m; i++) Inv = 1ll * Inv * i % Mod;
Inv = fastpow(Inv, Mod - 2); Pow = (fastpow(2, n) - 1 + Mod) % Mod;
for(RG int i = 1; i <= m; i++) A[i] = 1ll * A[i - 1] * (Pow - i + 1) % Mod;
for(RG int i = 2; i <= m; i++)
{
f[i] = (A[i - 1] - f[i - 1] + Mod) % Mod;
f[i] = (f[i] - 1ll * f[i - 2] * (i - 1)
% Mod * (Pow - (i - 2)) % Mod) % Mod;
f[i] = (f[i] + Mod) % Mod;
}
printf("%lld\n", 1ll * f[m] * Inv % Mod);
return 0;
}

【HNOI2011】卡农的更多相关文章

  1. [BZOJ2339][HNOI2011]卡农

    [BZOJ2339][HNOI2011]卡农 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见& ...

  2. bzoj2339[HNOI2011]卡农 dp+容斥

    2339: [HNOI2011]卡农 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 842  Solved: 510[Submit][Status][ ...

  3. BZOJ2339[HNOI2011]卡农——递推+组合数

    题目链接: [HNOI2011]卡农 题目要求从$S=\{1,2,3……n\}$中选出$m$个子集满足以下三个条件: 1.不能选空集 2.不能选相同的两个子集 3.每种元素出现次数必须为偶数次 我们考 ...

  4. P3214 [HNOI2011]卡农

    题目 P3214 [HNOI2011]卡农 在被一题容斥\(dp\)完虐之后,打算做一做集合容斥这类的题了 第一次深感HNOI的毒瘤(题做得太少了!!) 做法 求\([1,n]\)组成的集合中选\(m ...

  5. 【BZOJ2339】[HNOI2011]卡农 组合数+容斥

    [BZOJ2339][HNOI2011]卡农 题解:虽然集合具有无序性,但是为了方便,我们先考虑有序的情况,最后将答案除以m!即可. 考虑DP.如果我们已经知道了前m-1个集合,那么第m个集合已经是确 ...

  6. [HNOI2011]卡农

    题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...

  7. [HNOI2011]卡农 题解

    题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...

  8. [HNOI2011]卡农 (数论计数,DP)

    题面 原题面 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则. 他将声音分成 n n n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 1 1 ...

  9. bzoj 2339: [HNOI2011]卡农

    Description Solution 比较难想.... 我们先考虑去掉无序的这个条件,改为有序,最后除 \(m!\) 即可 设 \(f[i]\) 表示前\(i\)个合法集合的方案数 明确一点: 如 ...

  10. 2339: [HNOI2011]卡农

    Description 首先去除顺序不同算一种的麻烦,就是最后答案除以总片段数\(2^m-1\) 设\(f_i\)表示安排\(i\)个片段的合法种类 那么对于任何一个包含\(i-1\)个片段的序列(除 ...

随机推荐

  1. idea常用到的命令

    idea大小写转换:ctr+shift+u ctrl+alt+b,跳转到接口的方法实现处

  2. 如何利用RMAN Debug和10046 Trace来诊断RMAN问题?

         在做Support的这些年,我很大的收获是掌握了许多troubleshooting问题的方法和工具,对于每一类问题,都可以大体归类出一些诊断方法.无论问题多么复杂,像扒洋葱一样,一层层去掉无 ...

  3. Vmware Horizon 服务器替换 ssl 证书

    先申请好证书,如通配符SSL证书 *.centaline.com.cn ,公网的证书供应商会给到3个文件:centaline.com.cn.crt .centaline.com.cn.csr.cent ...

  4. libc.so.6: cannot open shared object file: No such file or diretory

    环境 centos6.6. 由于误操作 删除了 rm -f /lib64/libc.so.6 导致其他命令不能使用 解决方法: /sbin/sln /lib64/libc-

  5. 企业大数据之Elasticsearch的搜索类型

    下面的 ES基于版本(V2.3.4) ES之默认 1.默认自动发先同一局域网的所有集群节点 2.默认一个索引库会有5个分片,(分片越多,效率越好) 由于这两个默认,所以统一索引库的分片对分布在不同机器 ...

  6. springmvc入门之HelloWorld篇

    springmvc是一个基于spring的mvc框架,各种优点啥的用过就知道了.下面开始讲HelloWorldController的实现. 1.开发环境搭建<导jar包+配置文件> 1.1 ...

  7. AOP-Advisor-笔记

    一.Advisor接口 这个接口是一个通知者的顶层接口.它实现类持有一个通知(advice)和一个过滤器的引用.用过滤器来决定通知是否合适目标对象. 这个接口只有两个方法,所以将整个代码贴上来. /* ...

  8. 20165318 2017-2018-2 《Java程序设计》第二周学习总结

    20165318 2017-2018-2 <Java程序设计>第二周学习总结 教材学习内容总结 本周学习了第二章和第三章的内容,掌握了Java中基本数据类型.数组.运算符.表达式和语句等方 ...

  9. 【转】合格PHP工程师的知识结构

    PHP的运行环境 连环境都搞不起来,就是你有多么喜欢PHP,那也是白搭,开始我们大多会使用集成环境软件例如xampp,wamp.随着知识的增加慢慢要学会自己搭建运行环境,例如 Linux(Ubuntu ...

  10. 20155314 2016-2017-2 《Java程序设计》实验一 Java开发环境的熟悉(macOS + IDEA)

    20155314 2016-2017-2 <Java程序设计>实验一 Java开发环境的熟悉(macOS + IDEA) 实验内容 使用JDK编译.运行简单的Java程序: 使用IDEA ...