卡农(canon)

题意

众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则。他将声音分成n个音阶,并将音乐分成若干个片段。音乐的每个片段都是由1到n个音阶构成的和声,即从n个音阶中挑选若干个音阶同时演奏出来。为了强调与卡农的不同,他规定任意两个片段所包含的音阶集合都不同。同时为了保持音乐的规律性,他还规定在一段音乐中每个音阶被奏响的次数为偶数。现在的问题是:小余想知道包含m个片段的音乐一共有多少种。两段音乐a和b同种当且仅当将a的片段重新排列后可以得到b。例如:假设a为{{1,2},{2,3}},b为{{3,2},{2,1}},那么a与b就是同种音乐。由于种数很多,你只需要输出答案模100000007(质数)的结果。

20%的数据满足n,m≤5,50%的数据满足n,m≤3000,100%的数据满足n,m≤1000000。

题解:

这题好神啊,感觉思路很妙。
考虑题目要求的限制:1.m个集合互不相同;2.每个元素出现偶数次;3.无序。
一开始考虑的是集合不同+无序=集合字典序递增,但这样的转态显然难以记录。
后来想的是两个相同的集合不会对元素的奇偶性有影响,于是可以先不考虑1的限制,然后容斥计算,但这过程中有序和无序的转化很麻烦,因为有重复的集合。
然后自闭。
正解:
考虑集合元素互不相同时,无序和有序容易转化,而显然有序更好求,就先去掉限制3。
如果只有限制1显然是A2n−1,mA_{2^{n}-1,m}A2n1,m,考虑如何高效地维护限制2,显然不能一位位算,这样不仅效率低而且没法使集合不同。这里巧妙地利用了题目的性质:因为只关心奇偶性,于是无论前面是多少,每一个集合都可以使每一个元素变成奇或偶,于是如果确定了前m−1m-1m1个集合,那么第mmm个集合是唯一确定的!于是前记mmm个的方案数为f[m]f[m]f[m],就是A2n−1,mA_{2^{n}-1,m}A2n1,m,但还要减去第m个为空集以及第m个与前面集合相同的情况。空集直接减去f[m−1]f[m-1]f[m1],枚举与前面哪一个相同,剩下的不相同的方案数就是f[m−2]f[m-2]f[m2],相同的又有2n−12^{n}-12n1种,于是又减去(i−1)∗f[m−2]∗A2n−1,m(i-1)*f[m-2]*A_{2^{n}-1,m}(i1)f[m2]A2n1,m即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值