题意

给出n和m,问选出m个集合,满足这m个集合互不相等且为{1,2,…,n}的子集,且每个数在这m个集合中出现的总次数为偶数的方案。答案模100000007
n,m<=1000000

分析

想了快一个小时都没想到怎么做。。。

首先我们可以把这m个集合变成有序的,然后最后再除以m!就好了。
我们可以设f[i]表示选了i个集合且满足题目要求的方案数。
很重要的一点就是,因为每个数出现次数必然为偶数,所以如果我们已经选了i-1个集合,那么第i个集合就已经是固定下来的了。
那么f[i]方案数就等于Ai−12n−1A_{2^n-1}^{i-1}
但是这样会有两种情况不满足:
1、前i-1个集合中每个数的出现次数均为偶数,那么第i个集合就是空集,是不满足的。所以要减去f[i-1]
2、推出第i个集合后,前i-1个集合中有一个是与它相同的。因为把这两个相同的集合去掉后,剩下的集合是一定满足题目条件的,所以剩下集合的方案数就是f[i-2],然后这两个集合的方案数就是2n−1−(i−2)2^n-1-(i-2),乘起来即可。
最后记得除以m!。
上面那个排列数可以通过递推来求。

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;typedef long long LL;const int N=1000005;
const int MOD=100000007;int n,m,f[N],g[N];int ksm(int x,int y)
{int ans=1;while (y){if (y&1) ans=(LL)ans*x%MOD;x=(LL)x*x%MOD;y>>=1;}return ans;
}int main()
{scanf("%d%d",&n,&m);int w=ksm(2,n)-1;g[1]=w;for (int i=3;i<=m;i++){g[i-1]=((LL)g[i-2]*(w-i+2)%MOD+MOD)%MOD;f[i]=(g[i-1]-f[i-1]-(LL)f[i-2]*(i-1)%MOD*(w-i+2)%MOD+MOD)%MOD;}int inv=1;for (int i=2;i<=m;i++) inv=(LL)inv*i%MOD;f[m]=(LL)f[m]*ksm(inv,MOD-2)%MOD;printf("%d",f[m]);return 0;
}

bzoj 2339: [HNOI2011]卡农 组合数学+递推相关推荐

  1. [Luogu P3214] [BZOJ 4339] [HNOI2011]卡农

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

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

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

  3. P3214 [HNOI2011] 卡农 题解

    P3214 [HNOI2011] 卡农 文章目录 代码 题解 前言 正文 要素 代码 #include <bits/stdc++.h> using namespace std;#defin ...

  4. [BZOJ2339][HNOI2011]卡农

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

  5. 【bzoj 4451】[Cerc2015]Frightful Formula - 递推

    才没有在做cerc2015呢 看到好像不少人这题写fft卡得死死的啊,不如 O(n) O(n) 递推(雾) 首先可以观察出 (i,1) (i,1)这个格子为 x x时对(n,n)(n,n) a,b a ...

  6. Bzoj 1046: [HAOI2007]上升序列 二分,递推

    1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3671  Solved: 1255 [Submit][St ...

  7. BZOJ2339: [HNOI2011]卡农(dp 容斥)

    题意 从$1 - n$中任意选择一些数,选$m$次构成$m$个集合 保证: 集合不为空 任意两个集合不相同 集合内各个元素xor起来等于0 Sol 神仙题Orz 我看到两种做法,一种是洛谷题解上的直接 ...

  8. [HNOI2011] 卡农 题解

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

  9. [HNOI2011]卡农

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

  10. P4492 [HAOI2018]苹果树(组合数学+递推)

    LINK 一颗苹果树长 n n n天,第一天长出根节点,每个节点有左右两个分支 以后每一天,在这棵树的所有分支处随机选择一个,长出一个新节点 定义这个树的不便度为树上两两节点的距离和 E E E,输出 ...

最新文章

  1. wamp安装多版本php,WampServer安装多个php版本
  2. c语言程序设计实验教学,C语言程序设计实验教学改革研究
  3. 【基带传输】基于matlab的简易无线基带传输系统的仿真
  4. 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。...
  5. matlab中服从高斯分布的矩阵_一些张量的计算步骤matlab代码
  6. SQL Server中的MTVF和CE模型变化
  7. 电脑小手图标怎么去除_图文教你去除桌面图标箭头_消除电脑图标小箭头的方法-系统城...
  8. 教育行业是永恒不过时的常青藤行业!
  9. 骑着单车追随你——西西里的美丽传说
  10. 7.1 RAID(独立冗余磁盘阵列)
  11. 多益2980邮箱集合专业游戏服务免费安全的电子邮箱
  12. Blender 显示键盘和鼠标操作
  13. 数据上采样和下采样_采样不足以配置您的ml数据
  14. ILPD(印度肝病患者)分类BP算法和KNN
  15. python画雷达图-python 雷达图
  16. VueCli3开发订餐app项目
  17. 什么是项目管理软件中的时间管理?
  18. 等待跳转JS倒计时10秒
  19. 使用 Thumbnails 压缩图片
  20. 【麦克纳姆轮(万向轮)驱动原理及安装方法】

热门文章

  1. 【Racket】安装与入门
  2. 8/3 MATLAB绘制正态分布概率密度函数(normpdf)图形
  3. 论文笔记:Reciprocal Multi-Layer Subspace Learning for Multi-View Clustering
  4. 地理极客的Planet卫星影像指南
  5. Linux yum源文件
  6. java的简单逻辑博彩游戏craps
  7. 关于Webgl实际中遇到的一些坑,与大家分享。
  8. 服务器监控系统应有哪些功能,公安视频监控系统需要具备哪些功能
  9. 操作系统实验一 进程管理
  10. 如何培训新进的软件测试人员