bzoj2339: [HNOI2011]卡农
【题意】
求出由多少个不同的集合满足下列条件:
1.集合内含有m个不同的非空数集,每个数集由若干个不同的1~n的数组成。
2.集合内每个1~n的整数在本集合的所有数集中总共出现偶数次。
以上提到的集合和数集均不考虑元素的顺序,即含有的元素相同但元素顺序不同被视为同一种集合。
【题解】
还是得强调看了题解,思想很巧妙。。。。
直接套式子求出题意所求的集合数是比较困难的。
所以考虑补集转化的思想。
首先我们把所有元素顺序不同的集合当不同的算,这样会比较容易,只要方案数最后除去m!就是答案了。。。
设f[x]为仅需选取x个不同数集就满足条件2的集合数。
假设为了满足条件2,那么显然在选取了m-1个不同数集之后,剩下那个数集是确定的。
这样就有P(2^n-1,m-1)这样的数集。
但这个确定的数集被选取之后可能会不满足条件1。总的有2种情况:
1.前m-1个集合已满足条件2,使得剩下的数集为空集。(有f[m-1]个这样的集合)
2.选取的剩下那个数集与之前m-1个的某一个相同。(有f[m-2]*(m-1)*(2^n-1-(m-2))个……)
所以我们得减去这2种集合的数量。
递推式即为:
f[m]=A(2^n-1,m-1)-f[m-1]-f[m-2]*(m-1)*(2^n-1-(m-2))
最后只要除以m!就行了。
【代码】
1 #include <iostream> 2 #include <cstdio> 3 typedef long long ll; 4 using namespace std; 5 const int mo=1e8+7; 6 const int N=1000005; 7 int a,n,m,s,f[N],A[N]; 8 int exp(int x,int k,int p) 9 { 10 int s=1; 11 for (;k;x=(ll)x*x%p,k>>=1) 12 if (k&1) s=(ll)s*x%p; 13 return s; 14 } 15 int inv(int x,int p) 16 { 17 return exp(x,p-2,p); 18 } 19 void pre() 20 { 21 a=exp(2,n,mo)-1; 22 A[0]=1; 23 for (int i=1;i<=m;++i) 24 A[i]=(ll)A[i-1]*((a-i+1)+mo)%mo; 25 } 26 int main() 27 { 28 cin>>n>>m; 29 pre(); 30 f[0]=1;f[1]=0; 31 for (int i=2;i<=m;++i) 32 f[i]=((A[i-1]-f[i-1]-(ll)f[i-2]*(i-1)%mo*(a-(i-2)+mo)%mo)%mo+mo)%mo; 33 s=1; 34 for (int i=1;i<=m;++i) 35 s=(ll)s*i%mo; 36 cout<<(ll)f[m]*inv(s,mo)%mo<<endl; 37 return 0; 38 }
View Code
转载于:https://www.cnblogs.com/Bleacher/p/7688242.html
bzoj2339: [HNOI2011]卡农相关推荐
- [BZOJ2339][HNOI2011]卡农
[BZOJ2339][HNOI2011]卡农 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见& ...
- bzoj2339[HNOI2011]卡农 dp+容斥
2339: [HNOI2011]卡农 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 842 Solved: 510 [Submit][Status ...
- BZOJ2339: [HNOI2011]卡农(dp 容斥)
题意 从$1 - n$中任意选择一些数,选$m$次构成$m$个集合 保证: 集合不为空 任意两个集合不相同 集合内各个元素xor起来等于0 Sol 神仙题Orz 我看到两种做法,一种是洛谷题解上的直接 ...
- P3214 [HNOI2011] 卡农 题解
P3214 [HNOI2011] 卡农 文章目录 代码 题解 前言 正文 要素 代码 #include <bits/stdc++.h> using namespace std;#defin ...
- [HNOI2011] 卡农 题解
众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则. 他将声音分成 nn 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 11 到 nn 个音阶构成的和 ...
- [HNOI2011]卡农
题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...
- [Luogu P3214] [BZOJ 4339] [HNOI2011]卡农
洛谷传送门 BZOJ传送门 题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 nnn 个音阶,并将音乐分成若干个片段.音乐的每个片段 ...
- HNOI2011 卡农
题目传送门 Description \(n\)种元素,构成\(m\)个集合\((n,m\leq 10^6)\),保证集合互不相同且非空,且每个元素总出现次数为偶数,两种方案集合重新排列可互相得到算 ...
- 数论三之排列组合Ⅱ——Virus Tree 2,RGB Coloring,123 Triangle,排列计数,排队,卡农
丝且人一口 Virus Tree 2 description solution code RGB Coloring description solution code 123 Triangle des ...
- 平遥摄影展:卡农•布斯克茨和他的「一天的结束」
平遥国际摄影展,一年一度,端相机人的节日.满街是镜头和摄影背心的攒动.我朋友说:没看到好照片,倒是看到不少好相机.这或许就是中国摄影界的写照,也是平遥摄影展的困境.如果没遇到布斯科茨,或许我真的白来平 ...
最新文章
- 线上分享会预告之三维模型检索技术介绍
- React.js 小书 Lesson12 - state vs props
- 前端技术周刊 2019-02-26:前端代码保护
- vc 文本框 只显示下划线_【Axure9百例】36.文本框搜索自动匹配
- php异步方案,PHP的异步实现方式
- mysql data_add data_sub
- 在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误
- kubectl logs -f tail 显示100_系统管理员应该知道的9个kubectl命令
- c语言结构引用6,C语言6结构体练习题6
- 微信公众号开发之微信服务器配置
- 编译OpenJDK12:Target CPU mismatch. We are building for x86_64 but CL is for ; expected x64
- Linux笔记 No.22---(Linux - PAM)
- 中国土地市场网-js解密
- 手写喜马拉雅APP特效
- oracle查看主备库延迟时间,【分享】Oracle 主备库容灾维护常用的九个SQL
- Explaining complex machine learning models with LIME
- 电信运营商的网络介绍
- 传智播客黑马Java学习笔记_day08_2
- 在龙芯3a5000处理器上进行qt-5.11.3源码编译流程与遇到的问题
- 如何下载Chrome商店的插件crx到本地?
热门文章
- oracle不能插入,oracle – 在过程中截断和插入不能一起工作
- monkey命令_Monkey 稳定性测试
- linux安装python的拓展包,linux 安装python拓展包pexpect
- jdbc代码_Mysql Java 驱动代码阅读笔记及 JDBC 规范笔记
- docker设置不同网络和迁移到指定网络
- 正常访问静态文件,不要找不到静态文件报404
- [PHP] - Laravel 5 的 Hello Wold
- HDU 3996 Gold Mine【最大闭合权图】
- CSS行高line-height属性理解及应用
- 【tensorRT文档翻译】7. Working With Dynamic Shapes