题目传送门

Description

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

Solution

开始做的时候不用管重新排列算重,只要最后除以\(m!\)即可。

设\(f_i\)为\(i​\)个子集的答案。

因为出现次数为偶数,所以确定前\(i-1\)个子集后,第\(i\)个也唯一确定。即选择\(i-1\)个子集的方案数,总共有\(2^n-1\)个子集,所以为\(A_{2^n-2}^{i-1}\)

然后有一些方案不符合要求,需要删去。

若第\(i\)个集合为空,那么前\(i-1\)个为一种合法方案,所以要减去\(f_{i-1}\)。

若第\(i​\)个集合与第\(j(j<i)​\)个集合相同,那么剩下\(n-2​\)个集合为一种合法方案\(f_{n-2}​\),\(j​\)的位置有\(n-1​\)种取值,而当\(n-2​\)中确定后,\(i​\)和\(j​\)的取法为\(2^n-1-(n-2)​\)。所以需减去\(f_{i-2}\cdot (i-1)\cdot (2^n-i+1)​\)

综上所述:
\[ f_i=A_{2^n-1}^{i-1}-f_{i-1}-f_{i-2}\cdot (i-1)\cdot (2^n-i+1) \]

\[ Ans=\frac{f_m}{m!} \]

Code

#include<bits/stdc++.h>
using namespace std;
const int N=1000005, P=100000007;
int A[N], F[N];inline int read()
{int x=0,f=1;char ch=getchar();for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';return x*f;
}int Pow(int x, int t)
{int res=1;while (t) t&1?res=1ll*res*x%P:0, x=1ll*x*x%P, t>>=1;return res;
}int main()
{int n=read(), m=read(), t=Pow(2, n), p=1; A[0]=1; F[F[1]=0]=1;for (int i=1; i<=m; i++) A[i]=1ll*A[i-1]*(t-i)%P, p=1ll*p*i%P;for (int i=2; i<=m; i++) F[i]=(A[i-1]-F[i-1]-1ll*F[i-2]*(i-1)%P*(t-i+1)%P)%P;printf("%d\n", ((1ll*F[m]*Pow(p, P-2)%P)+P)%P);return 0;
}

转载于:https://www.cnblogs.com/ACMSN/p/10742980.html

HNOI2011 卡农相关推荐

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

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

  2. [BZOJ2339][HNOI2011]卡农

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

  3. P3214 [HNOI2011] 卡农 题解

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

  4. [HNOI2011] 卡农 题解

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

  5. [HNOI2011]卡农

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

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

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

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

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

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

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

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

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

最新文章

  1. Arcgis for JS之Cluster聚类分析的实现
  2. 【转】CSS3 Box-sizing
  3. c# SQL CLR 之一
  4. git push origin master Connection timed out
  5. 西门子plm_好事连连 西门子PLM新品多项合作并举
  6. hadoop和kerberos的整合总结
  7. 代码风格统一: 使用husky, prettier, eslint在代码提交时自动格式化,并检查代码。...
  8. 去掉thinktime查看响应时间的方法
  9. SCOM监控APC-UPS不间断电源设备
  10. 在C#中解析命令行参数的最佳方法? [关闭]
  11. ubuntu的无比注意事项
  12. 新的vulkan的SDK很难下载
  13. 封装自己专属的真正的纯净版Windows系统过程记录(4)——进行封装
  14. 【重点】计算机二级公共基础重点
  15. matlab偏最小二乘法及其检验
  16. 设置MyEclipse2015黑色主题背景及删除主题
  17. 分享11个网页游戏和9个黑客源码,总有一款适合你
  18. Matplotlib系列(一):快速绘图入门
  19. Oracle分页查询存储过程(适用于单表查询)
  20. c语言平时作业完成的评价,C语言作业评价标准 - osc_fmg49rzg的个人空间 - OSCHINA - 中文开源技术交流社区...

热门文章

  1. 健康指南:手机放哪里辐射危害最低?
  2. 用LD_PRELOAD加载jemalloc
  3. 五、JAVA调用海康威视SDK实现摄像头内网转外网并前端展示
  4. 2019年8月中国编程语言排行榜
  5. 异常检测算法概述(全)
  6. [学习笔记]第一类/第二类斯特林数
  7. SQLSERVER基础--数据类型
  8. Python爬取高清桌面壁纸(附源码),直接运行即可
  9. [C语言]计算sin值填空 :阅读下面程序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。然后上机运行程序。利用公式,计算sin x(x为弧度值)的值,直到最后一项的绝对值小于。。。
  10. 1001 Pearls of Teachers' Wisdom by Erin Gruwell