HNOI2011 卡农
题目传送门
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 卡农相关推荐
- bzoj2339[HNOI2011]卡农 dp+容斥
2339: [HNOI2011]卡农 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 842 Solved: 510 [Submit][Status ...
- [BZOJ2339][HNOI2011]卡农
[BZOJ2339][HNOI2011]卡农 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见& ...
- 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 个音阶,并将音乐分成若干个片段.音乐的每个片段 ...
- BZOJ2339: [HNOI2011]卡农(dp 容斥)
题意 从$1 - n$中任意选择一些数,选$m$次构成$m$个集合 保证: 集合不为空 任意两个集合不相同 集合内各个元素xor起来等于0 Sol 神仙题Orz 我看到两种做法,一种是洛谷题解上的直接 ...
- 数论三之排列组合Ⅱ——Virus Tree 2,RGB Coloring,123 Triangle,排列计数,排队,卡农
丝且人一口 Virus Tree 2 description solution code RGB Coloring description solution code 123 Triangle des ...
- 平遥摄影展:卡农•布斯克茨和他的「一天的结束」
平遥国际摄影展,一年一度,端相机人的节日.满街是镜头和摄影背心的攒动.我朋友说:没看到好照片,倒是看到不少好相机.这或许就是中国摄影界的写照,也是平遥摄影展的困境.如果没遇到布斯科茨,或许我真的白来平 ...
最新文章
- Arcgis for JS之Cluster聚类分析的实现
- 【转】CSS3 Box-sizing
- c# SQL CLR 之一
- git push origin master Connection timed out
- 西门子plm_好事连连 西门子PLM新品多项合作并举
- hadoop和kerberos的整合总结
- 代码风格统一: 使用husky, prettier, eslint在代码提交时自动格式化,并检查代码。...
- 去掉thinktime查看响应时间的方法
- SCOM监控APC-UPS不间断电源设备
- 在C#中解析命令行参数的最佳方法? [关闭]
- ubuntu的无比注意事项
- 新的vulkan的SDK很难下载
- 封装自己专属的真正的纯净版Windows系统过程记录(4)——进行封装
- 【重点】计算机二级公共基础重点
- matlab偏最小二乘法及其检验
- 设置MyEclipse2015黑色主题背景及删除主题
- 分享11个网页游戏和9个黑客源码,总有一款适合你
- Matplotlib系列(一):快速绘图入门
- Oracle分页查询存储过程(适用于单表查询)
- c语言平时作业完成的评价,C语言作业评价标准 - osc_fmg49rzg的个人空间 - OSCHINA - 中文开源技术交流社区...
热门文章
- 健康指南:手机放哪里辐射危害最低?
- 用LD_PRELOAD加载jemalloc
- 五、JAVA调用海康威视SDK实现摄像头内网转外网并前端展示
- 2019年8月中国编程语言排行榜
- 异常检测算法概述(全)
- [学习笔记]第一类/第二类斯特林数
- SQLSERVER基础--数据类型
- Python爬取高清桌面壁纸(附源码),直接运行即可
- [C语言]计算sin值填空 :阅读下面程序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。然后上机运行程序。利用公式,计算sin x(x为弧度值)的值,直到最后一项的绝对值小于。。。
- 1001 Pearls of Teachers' Wisdom by Erin Gruwell