题目链接:卡农

  听说这道题是经典题?

  首先明确一下题意(我在这里纠结了好久):有\(n\)个数,要求你选出\(m\)个不同的子集,使得每个数都出现了偶数次。无先后顺序。

  这道题就是一道数学题。显然我们可以强制有先后顺序,只需要在最后除掉一个\(m!\)即可。令\(f_i\)表示选出\(i\)个子集的方案数,我们来考虑一下怎么算。

  由于总的方案数很好计算,选出\(i\)个子集的方案就是\(A^{i-1}_{2^n-1}\),因为一旦选出了前\(i-1\)个,第\(i\)个就已经确定了。

  我们这样选,可以保证每个数出现了偶数次,但是并不能够保证选出的不是空集以及集合不重复。所以我们来看看不合法的情况有多少。

  第一种情况,如果前\(i-1\)个就是一个合法方案,那么第\(i\)个只能是空集。这种情况显然不合法,方案数是\(f_{i-1}\)。

  第二种情况,第\(i\)个集合和之前任意一个冲突了就不行。由于另外还剩\(i-2\)个集合未确定,所以这部分方案数为\((i-1)f_{i-2}(2^n-1-(i-2))\)。第\(i\)个集合可选的方案数为\(2^n-1-(i-2)\),然后和另外\(i-2\)个一起排列一下还要乘上\(i-1\)。

  所以这道题就做完了。

  下面贴代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define maxn 1000010
#define mod 100000007using namespace std;
typedef long long llg;int n,m,nci;
llg f[maxn],g[maxn],jie;llg mi(llg a,int b){llg s=1;while(b){if(b&1) s=s*a%mod;a=a*a%mod; b>>=1;}return s;
}int main(){File("a");scanf("%d %d",&n,&m);nci=(mi(2,n)-1+mod)%mod; g[0]=jie=1;for(int i=1;i<=m;i++) g[i]=g[i-1]*(nci-i+1)%mod;for(int i=1;i<=m;i++) jie*=i,jie%=mod;for(int i=3;i<=m;i++){f[i]=g[i-1]-f[i-1];f[i]-=(i-1)*f[i-2]%mod*(nci-i+2)%mod;f[i]%=mod; if(f[i]<0) f[i]+=mod;}printf("%lld",f[m]*mi(jie,mod-2)%mod);return 0;
}

转载于:https://www.cnblogs.com/lcf-2000/p/6618151.html

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. [BZOJ2339][HNOI2011]卡农

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

  4. P3214 [HNOI2011] 卡农 题解

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

  5. [HNOI2011] 卡农 题解

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

  6. [HNOI2011]卡农

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

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

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

  8. HNOI2011 卡农

    题目传送门 Description \(n​\)种元素,构成\(m​\)个集合\((n,m\leq 10^6)\),保证集合互不相同且非空,且每个元素总出现次数为偶数,两种方案集合重新排列可互相得到算 ...

  9. 数论三之排列组合Ⅱ——Virus Tree 2,RGB Coloring,123 Triangle,排列计数,排队,卡农

    丝且人一口 Virus Tree 2 description solution code RGB Coloring description solution code 123 Triangle des ...

  10. 平遥摄影展:卡农•布斯克茨和他的「一天的结束」

    平遥国际摄影展,一年一度,端相机人的节日.满街是镜头和摄影背心的攒动.我朋友说:没看到好照片,倒是看到不少好相机.这或许就是中国摄影界的写照,也是平遥摄影展的困境.如果没遇到布斯科茨,或许我真的白来平 ...

最新文章

  1. ES6 let const 关键字
  2. 汇编语言介绍,内存和总线的初步认识
  3. 《大道至简》第八章读后感
  4. wp_nav_menu($args)函数说明
  5. SQL语句性能分析常用命令
  6. mybatis 之 parameterType=Map
  7. 一个注册表操作类,很有用!
  8. 倍福嵌入式控制器PLC各型号介绍
  9. C++游戏服务器框架笔记(二)_封装Socket类
  10. 基于stm32的智能家居语音控制系统
  11. TIFF图像文件格式与实例分析
  12. (转)如何使用Xcode的Targets来管理开发和生产版本的构建
  13. iperf的ios版本;无线局域网测速
  14. POJ 1659 Frogs‘ Neighborhood (Havel 定理)
  15. hive向mysql导数据_Mysql Hive 导入导出数据
  16. 更改MySQL数据库root密码
  17. Python机器学习06——朴素贝叶斯
  18. ap计算机sql,如何用sql实现AP
  19. java期末复习题-110道选择题
  20. C++编程学习52个经典网站 强力推荐

热门文章

  1. 如何让搜狗快速收录网站的技巧和方法
  2. html 制作箭头,怎么使用html制作箭头?制作箭头代码分享!
  3. 简单封装retrofit2+rxjava2
  4. cass等距离等分线段的命令键_cad直线均分的命令(CAD等分线段快捷键?)
  5. 用ReadyBoost提高Windows 7系统性能
  6. SCI收录中国期刊一览表
  7. 16进制颜色代码#FF000000 (css颜色值)
  8. VIN码识别技术,扫一扫自动获取车架号
  9. uw计算机专业大一课程,大一新生选课攻略和你不能错过的小技巧
  10. 看图和步骤教你把dwg转换成pdf格式