bzoj 2339: [HNOI2011]卡农 组合数学+递推
题意
给出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]卡农 组合数学+递推相关推荐
- [Luogu P3214] [BZOJ 4339] [HNOI2011]卡农
洛谷传送门 BZOJ传送门 题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 nnn 个音阶,并将音乐分成若干个片段.音乐的每个片段 ...
- bzoj2339[HNOI2011]卡农 dp+容斥
2339: [HNOI2011]卡农 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 842 Solved: 510 [Submit][Status ...
- P3214 [HNOI2011] 卡农 题解
P3214 [HNOI2011] 卡农 文章目录 代码 题解 前言 正文 要素 代码 #include <bits/stdc++.h> using namespace std;#defin ...
- [BZOJ2339][HNOI2011]卡农
[BZOJ2339][HNOI2011]卡农 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见& ...
- 【bzoj 4451】[Cerc2015]Frightful Formula - 递推
才没有在做cerc2015呢 看到好像不少人这题写fft卡得死死的啊,不如 O(n) O(n) 递推(雾) 首先可以观察出 (i,1) (i,1)这个格子为 x x时对(n,n)(n,n) a,b a ...
- Bzoj 1046: [HAOI2007]上升序列 二分,递推
1046: [HAOI2007]上升序列 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3671 Solved: 1255 [Submit][St ...
- BZOJ2339: [HNOI2011]卡农(dp 容斥)
题意 从$1 - n$中任意选择一些数,选$m$次构成$m$个集合 保证: 集合不为空 任意两个集合不相同 集合内各个元素xor起来等于0 Sol 神仙题Orz 我看到两种做法,一种是洛谷题解上的直接 ...
- [HNOI2011] 卡农 题解
众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则. 他将声音分成 nn 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 11 到 nn 个音阶构成的和 ...
- [HNOI2011]卡农
题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...
- P4492 [HAOI2018]苹果树(组合数学+递推)
LINK 一颗苹果树长 n n n天,第一天长出根节点,每个节点有左右两个分支 以后每一天,在这棵树的所有分支处随机选择一个,长出一个新节点 定义这个树的不便度为树上两两节点的距离和 E E E,输出 ...
最新文章
- wamp安装多版本php,WampServer安装多个php版本
- c语言程序设计实验教学,C语言程序设计实验教学改革研究
- 【基带传输】基于matlab的简易无线基带传输系统的仿真
- 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。...
- matlab中服从高斯分布的矩阵_一些张量的计算步骤matlab代码
- SQL Server中的MTVF和CE模型变化
- 电脑小手图标怎么去除_图文教你去除桌面图标箭头_消除电脑图标小箭头的方法-系统城...
- 教育行业是永恒不过时的常青藤行业!
- 骑着单车追随你——西西里的美丽传说
- 7.1 RAID(独立冗余磁盘阵列)
- 多益2980邮箱集合专业游戏服务免费安全的电子邮箱
- Blender 显示键盘和鼠标操作
- 数据上采样和下采样_采样不足以配置您的ml数据
- ILPD(印度肝病患者)分类BP算法和KNN
- python画雷达图-python 雷达图
- VueCli3开发订餐app项目
- 什么是项目管理软件中的时间管理?
- 等待跳转JS倒计时10秒
- 使用 Thumbnails 压缩图片
- 【麦克纳姆轮(万向轮)驱动原理及安装方法】