BZOJ2339 HNOI2011卡农(动态规划+组合数学)
考虑有序选择各子集,最后除以m!即可。设f[i]为选i个子集的合法方案数。
对f[i]考虑容斥,先只满足所有元素出现次数为偶数。确定前i-1个子集后第i个子集是确定的,那么方案数为A(2n-1,i-1)。
显然不能为空集,于是去掉前i-1个已经满足限制的方案,也即f[i-1]。
然后去掉第i个子集和之前重复的情况。显然如果有重复,将这两个去掉后仍然是合法的。那么方案数为f[i-2]*(i-1)*(2n-1-(i-2))。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define P 100000007
#define N 1000010
int n,m,f[N],inv[N],p,A[N];
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj2339.in","r",stdin);
freopen("bzoj2339.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),m=read();
p=;for (int i=;i<=n;i++) p=(p<<)%P;p--;
inv[]=;
for (int i=;i<=m;i++) inv[i]=P-1ll*(P/i)*inv[P%i]%P;
for (int i=;i<=m;i++) inv[i]=1ll*inv[i]*inv[i-]%P;
A[]=;for (int i=;i<=m;i++) A[i]=1ll*A[i-]*(p-i++P)%P;
f[]=;f[]=;
for (int i=;i<=m;i++) f[i]=((A[i-]-f[i-]+P)%P-1ll*f[i-]*(i-)%P*(p-i++P)%P+P)%P;
cout<<1ll*f[m]*inv[m]%P;
return ;
}
BZOJ2339 HNOI2011卡农(动态规划+组合数学)的更多相关文章
- [BZOJ2339][HNOI2011]卡农
[BZOJ2339][HNOI2011]卡农 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见& ...
- bzoj2339[HNOI2011]卡农 dp+容斥
2339: [HNOI2011]卡农 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 842 Solved: 510[Submit][Status][ ...
- BZOJ2339[HNOI2011]卡农——递推+组合数
题目链接: [HNOI2011]卡农 题目要求从$S=\{1,2,3……n\}$中选出$m$个子集满足以下三个条件: 1.不能选空集 2.不能选相同的两个子集 3.每种元素出现次数必须为偶数次 我们考 ...
- 【BZOJ2339】[HNOI2011]卡农 组合数+容斥
[BZOJ2339][HNOI2011]卡农 题解:虽然集合具有无序性,但是为了方便,我们先考虑有序的情况,最后将答案除以m!即可. 考虑DP.如果我们已经知道了前m-1个集合,那么第m个集合已经是确 ...
- 【BZOJ2339】卡农(递推,容斥)
[BZOJ2339]卡农(递推,容斥) 题面 BZOJ 题解 先简化一下题意: 在\([1,2^n-1]\)中选择不重复的\(m\)个数,使得他们异或和为\(0\)的方案数. 我们设\(f[i]\)表 ...
- P3214 [HNOI2011]卡农
题目 P3214 [HNOI2011]卡农 在被一题容斥\(dp\)完虐之后,打算做一做集合容斥这类的题了 第一次深感HNOI的毒瘤(题做得太少了!!) 做法 求\([1,n]\)组成的集合中选\(m ...
- [HNOI2011]卡农
题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...
- [HNOI2011]卡农 题解
题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...
- [HNOI2011]卡农 (数论计数,DP)
题面 原题面 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则. 他将声音分成 n n n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 1 1 ...
随机推荐
- git push失败
不知道弄错了什么上传项目到github上失败 git commit的时候提示 On branch masternothing to commit, working tree clean git pus ...
- 如何把word ppt 思维导图这类文件转化为高清晰度的图片(要干货只看粗体黑字)
我使用思维导图做学习笔记,最终绘制了一张比较满意的思维导图,想要分享出去,但由于现在思维导图软件众多,成品文件格式差别蛮大,不利于传播和打开,所以需要转化为普通图片,但笔者使用的导图软件导出转化成的图 ...
- PLSQL面向对象
```sql --定义可被SQL语句调用的子程序 create or replace function getempdept( p_empno emp.empno%type )return ...
- mongodb 如何删除 字段值为 json对象中的某个字段值
例如: { attributes: { birthday:'1988-01-01', name: 'aq' } } birthday是attributes字段的value的一个字段, 我要删除birt ...
- php 常用英语小汇
bstract抽象的 -挨伯丝拽克特 access存取.访问 -挨克色丝 account账户 -厄靠恩特 action动作 -爱克身 activate激活 -爱克特维特 active活动的 -爱克得 ...
- It isn't possible to write into a document from an asynchronously-loaded
It isn't possible to write into a document from an asynchronously-loaded 今天遇到了一个问题: 通过document.wri ...
- 【探路者】Beta发布用户使用报告
用户数量:18 一.用户列表及评论. 用户序号 用户来源 用户下载软件途径 用户姓名 用户描述(信息) 使用次数 用户评价 1 张恩聚 QQ发送可运行jar包 周楠 吉林大学在读研究生 5 ...
- Daily Scrum (2015/11/7)
今晚谢金洛同学的UI工作完成,我们进行了UI和后端的拼接,准备开始规范化地进行系统测试. 成员 今日任务及成果 时间 明日任务 符美潇 1.把之前PM分配的编码任务及其说明准备好发给PM 1h 待定 ...
- 团队冲刺--Seven
昨天: 司宇航:测试功能版块,优化功能版块. 马佳慧:优化界面 . 王金萱:合并程序. 季方: 合并程序. 今天: 司宇航:优化功能版块. 马佳慧:优化界面 . 王金萱:优化界面. 季方: 完善功 ...
- 文献:Technology-related Disasters:A Survey toward Disaster-resilient Software Defined Networks
DISASTER的定义和影响(本文中) 定义范围: 自然灾害,比如洪水.地震等造成一定范围类的节点故障: 恶意攻击,DDOS攻击或者电磁脉冲攻击造成节点故障: 技术相关的问题,配置错误或者误操作等: ...