[BZOJ2339][HNOI2011]卡农 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见"试题描述" 数据规模及约定 见"试题描述" 题解 先考虑 m 个 01 串排顺序的情况.可以发现如果定下前 m - 1 个 01 串,那么第 m 个串就可以由前面所有 01 串按位异或得出,所以方案数为 A(2n - 1, m - 1)(即除全 0 串外的所有情况选择…
2339: [HNOI2011]卡农 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 842  Solved: 510[Submit][Status][Discuss] Description 可以把集合视作有序的,当做排列做,最后再 /m!设f[i]表示选出i个集合的合法方案 选出了(i-1)个集合后,最后一个集合是唯一确定的 总数就是A(2^n - 1,i-1)但是最后确定的集合可能使方案不合法,有两种情况1.最后确定的集合为空,这种情况的方案…
题目链接: [HNOI2011]卡农 题目要求从$S=\{1,2,3……n\}$中选出$m$个子集满足以下三个条件: 1.不能选空集 2.不能选相同的两个子集 3.每种元素出现次数必须为偶数次 我们考虑递推,设$f[i]$为选$i$个集合满足以上条件的方案数. 考虑容斥: 当确定了前$i-1$个集合后,要满足第三个条件的话,第$i$个集合是唯一确定的,所以总方案数为$A_{2^n-1}^{i-1}$. 去掉第$i$个集合是空集的情况,如果第$i$个集合是空集,那么前$i-1$个集合一定合法,即方…
考虑有序选择各子集,最后除以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<cstdi…
[BZOJ2339][HNOI2011]卡农 题解:虽然集合具有无序性,但是为了方便,我们先考虑有序的情况,最后将答案除以m!即可. 考虑DP.如果我们已经知道了前m-1个集合,那么第m个集合已经是确定的了.因为内层集合的n个元素可以随便出现,那么总数就是A(2^n-1,m-1).但是可能存在不合法的情况. 1.在前m-1个集合中,n个数出现的次数已经都是偶数了,那么第m个集合为空,不合法,此时方案数为f[m-1].2.第m个集合与之前某个集合相同,那么我们不考虑这两个集合,剩下的方案数为f[i…
[BZOJ2339]卡农(递推,容斥) 题面 BZOJ 题解 先简化一下题意: 在\([1,2^n-1]\)中选择不重复的\(m\)个数,使得他们异或和为\(0\)的方案数. 我们设\(f[i]\)表示选择\(i\)个数异或和为\(0\)的方案数. 直接算是很麻烦的,所以我们反过来,总数减去不合法的. 因为确定了前\(i-1\)个数最后一个数就已经知道了. 所以总方案数是\(A_{2^n-1}^{i-1}\),不合法的有两种,一种是选择了\(0\),一种是有重复. 选择了\(0\),意味着前\(…
题目 P3214 [HNOI2011]卡农 在被一题容斥\(dp\)完虐之后,打算做一做集合容斥这类的题了 第一次深感HNOI的毒瘤(题做得太少了!!) 做法 求\([1,n]\)组成的集合中选\(m\)个不同集合且每个元素出现偶数的组合方案 无序(打乱顺序仍记为一种)通常我们对于有序的做法更简单,怎么转换呢 C组合数的公式是怎么得来的?别说你是背来的\(emmm\)(那也没有做这题的必要了) 有序\(m!\)就得到了无序的 我们考虑\(dp\),数组\(dp_i\)表示选i个不同集合的排列方案…
题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的和声,即从 n 个音阶中挑选若干个音阶同时演奏出来.为了强调与卡农的不同,他规定任意两个片段所包含的音阶集合都不同.同时为了保持音乐的规律性,他还规定在一段音乐中每个音阶被奏响的次数为偶数.现在的问题是:小余想知道包含 m 个片段的音乐一共有多少种.两段音乐 a 和 b 同种当且仅当将 a 的片段重…
题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的和声,即从 n 个音阶中挑选若干个音阶同时演奏出来.为了强调与卡农的不同,他规定任意两个片段所包含的音阶集合都不同.同时为了保持音乐的规律性,他还规定在一段音乐中每个音阶被奏响的次数为偶数.现在的问题是:小余想知道包含 m 个片段的音乐一共有多少种.两段音乐 a 和 b 同种当且仅当将 a 的片段重…
题面 原题面 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则. 他将声音分成 n n n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 1 1 到 n n n 个音阶构成的和声,即从 n n n 个音阶中挑选若干个音阶同时演奏出来. 为了强调与卡农的不同,他规定任意两个片段所包含的音阶集合都不同.同时为了保持音乐的规律性,他还规定在一段音乐中每个音阶被奏响的次数为偶数.(注:"一段音乐"指整个曲子) 现在的问题是:小余想知道包含…
题目描述 题解 dp+容斥原理 先考虑有序数列的个数,然后除以$m!$即为集合的个数. 设$f[i]$表示选出$i$个集合作为满足条件的有序数列的方案数. 直接求$f[i]$较为困难,考虑容斥,满足条件的有序数列的方案数=总方案数-不满足条件的方案数. 考虑如果前$i-1$个集合确定,那么第$i$个集合也一定确定,总方案数为$2^n-1$个满足条件的集合(不包括空集)中取出$i-1$个的排列$A_{2^n-1}^{i-1}$. 不满足条件的方案有两种: 1.根据前$i-1$个集合确定的第$i$个…
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2339 题意: 思路: i64 Pow(i64 a,i64 b,i64 mod){    i64 ans=1;    while(b)    {        if(b&1) ans=ans*a%mod;        a=a*a%mod;        b>>=1;    }    return ans;} i64 n,m;i64 g[N],f[N]; i64 exGcd(i…
Description Solution 比较难想.... 我们先考虑去掉无序的这个条件,改为有序,最后除 \(m!\) 即可 设 \(f[i]\) 表示前\(i\)个合法集合的方案数 明确一点: 如果前\(i-1\)个集合已经确定,并且前\(i\)个是合法的,那么第\(i\)就是确定的,所以是一一对应的关系,如果不考虑重复和空集的情况,那么总方案数就是 \(A_{2^{n}-1}^{i-1}\) 考虑去掉不合法的: 1.当前集合为空集,方案数为 \(f[i-1]\) 2.有两个集合相同,那么去…
Description 首先去除顺序不同算一种的麻烦,就是最后答案除以总片段数\(2^m-1\) 设\(f_i\)表示安排\(i\)个片段的合法种类 那么对于任何一个包含\(i-1\)个片段的序列(除了发\(f_{i-1}\)的那几个合法序列)都能再找到唯一一个片段使得整个序列变为合法序列(那种和旋是基数个就选上).但是还有一种特例就是可能这个新选的片段已经在序列里了,这种情况下把这两个相同的片段去掉肯定还是合法序列啊,就是\(f_{i-2}\) 所以总柿子就是\[f_i= A_{2^m-1}^…
题目链接 \(Description\) 有\(n\)个数,用其中的某些数构成集合,求构造出\(m\)个互不相同且非空的集合(\(m\)个集合无序),并满足每个数总共出现的次数为偶数的方案数. \(Solution\) 为简化问题,将无序转为有序,只需在最后除以\(m!\)即可. 设\(f[i]\)表示构造前\(i\)个集合并满足条件的方案数. 每个数出现次数为偶数,所以如果前\(i-1\)个集合确定,第\(i\)个集合也可以确定.这样对于\(i\)有\(A_{2^n-1}^{i-1}\)种方案…
传送门 火题qwq 我们需要求的是满足元素个数为\(M\).元素取值范围为\([1,2^n-1]\).元素异或和为\(0\)的集合的数量. 首先我们可以计算元素有序的方案数(即计算满足这些条件的序列的数量),然后除以\(M!\). 设\(dp_i\)表示大小为\(i\)的满足条件的序列个数 由"元素异或和为\(0\)"可以知道,如果确定了其中\(i-1\)个向量,第\(i\)个向量就可以知道了,选择\(i-1\)个向量的方案数是\(A_{2^n-1}^{i-1}\) 然后考虑非法情况:…
题意:从编号为 1~N 的音阶中可选任意个数组成一个音乐片段,再集合组成音乐篇章.要求一个音乐篇章中的片段不可重复,都不为空,且出现的音符的次数都是偶数个.问组成 M 个片段的音乐篇章有多少种.答案取模1000000007(质数). 解法:先将题目模型化:N 个数组成 M 种组合,且要求组合之间互不相等,把各组合用二进制表示对 N 个数的取舍状态之后的异或和为0.   虽然求得是组合,但我们转化为排列来做计算时更方便.假设 f[i] 表示从 n 个数中选 i 种排列的方案数.那么就是"总的排列数…
洛谷题面传送门 又是一道我不会的代码超短的题( 一开始想着用生成函数搞,结果怎么都搞不粗来/ll 首先不妨假设音阶之间存在顺序关系,最终答案除以 \(m!\) 即可. 本题个人认为一个比较亮的地方在于,每个音阶被奏响次数都是偶数这个条件的处理方式.由于是奇偶性,我们可以发现如果我们钦定了其中 \(m-1\) 个片段对应的音阶集合,那么第 \(m\) 个片段中的音阶集合一定已经确定了.我们考虑从这个性质入手.设 \(dp_i\) 表示有多少个包含 \(i\) 个片段且符合要求的音阶集合,那么我们考…
题目链接:卡农 听说这道题是经典题? 首先明确一下题意(我在这里纠结了好久):有\(n\)个数,要求你选出\(m\)个不同的子集,使得每个数都出现了偶数次.无先后顺序. 这道题就是一道数学题.显然我们可以强制有先后顺序,只需要在最后除掉一个\(m!\)即可.令\(f_i\)表示选出\(i\)个子集的方案数,我们来考虑一下怎么算. 由于总的方案数很好计算,选出\(i\)个子集的方案就是\(A^{i-1}_{2^n-1}\),因为一旦选出了前\(i-1\)个,第\(i\)个就已经确定了. 我们这样选…
问题描述 BZOJ2339 本题的一些心得 对于这种无序集合计数类问题,可以通过对方案数除以某个数的阶乘,使得无序化变为有序化. 设计DP方程时候,应该先有序的列出状态转移方程每一项的来源,并一项项推导式子,可以使得做题过程更加有条理. 一个拥有良好科学素养的人,一定是有条理的 --李理 题解 对于本题,发现如果最后对答案除以 \(m!\),则可以使得集合 「有序化」 . 对于一个满足要求的方案,必须满足以下 \(3\) 个条件: 没有互相重复的集合 没有空集 集合中的每个元素都必须出现偶数次…
题解: 首先用二进制表示每个音阶是否使用,那么共有$2^{n}-1$(空集不可行)种片段,用$a_{i}$来表示每个片段,问题就是求满足$a_{1}\left (xor\right)a_{2}\left (xor\right)......\left (xor\right)a_{m}==0\&\&a_{i}!=a_{j},1<=i<j<=m$的方案数,我们用$f_{i}$表示片段数为i时,且满足前面式子的答案. 那么首先我们在选取i个片段时,必然是由前i-1个片段决定的,所…
题面 题解 将无序化为有序,最后答案除以$m!$. 设$f[i]$表示选出了$i$个子集,并且满足所有的限制的方案数. 因为转移困难,所以考虑容斥 限制了每个数的出现次数为偶数,所以如果前$i - 1$个子集是确定的,第$i$个的选择唯一, 一定是前面选了奇数次的元素的集合. 所以如果没有其他限制的情况下,选出$i$个自己的方案数为$A_{2^n-1}^{i-1}$ 然后减去第$i$个集合为空的情况,方案数为$f[i-1]$ 然后减去第$i$个集合与之前某个子集相同的情况. 如果将这两个相同的集…
打表可以发现相当于不存在长度>=3的递减子序列. 考虑枚举在哪一位第一次不卡限制.注意到该位一定会作为前缀最大值.判掉已确定位不合法的情况后,现在的问题即为求长度为i.首位>j的合法排列个数,设其为g[i][j]. 由于首位>j,1~j在排列中一定依次出现,并且在j出现之前,>j的部分也一定单增.于是可以先将>j的部分安排好,再将1~j不改变相对顺序地插入.>j的部分即是考虑没有各种奇怪的限制要怎么求.设f[i][j]为长度i的排列,第一个非前缀max的数在j位置的方案…
如果值域不大,容易想到设f[i][j]为第i个学校选了j的方案数,枚举上一个学校是哪个选了啥即可,可以前缀和优化.于是考虑离散化,由于离散化后相同的数可能可以取不同的值,所以枚举第一个和其所选数(离散化后)相同的学校是哪个,考虑这一段里选几个学校怎么选数,组合数即可.各种显然的优化后即可做到O(n3),瞎卡卡常就……根本过不了.被卡常已经习惯了.不要把有限的生命投入无限的卡常之中.越菜的人越容易被卡常.——沃兹基硕德.luogu8s,darkbzoj40s,bzoj?s. #include<io…
题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 输入输出格式 输入格式: 第一行是测试数据的数目t(0 <= t <= 20),以下每行均包括二个整数M和N,以空格分开.1<=M,N<=10 输出格式: 对输入的每组数据M和N,用一行输出相应的K. 输入输出样例 输入样例#1: 1 7 3 输出样例#1: 8 输入样例#2: 3 3 2 4 3 2 7 输出样例#2: 2 4 2 Solution…
% Cripple Pachebel’s Canon on Matlab% Have fun fs = 44100; % sample ratedt = 1/fs; T16 = 0.125; t16 = [0:dt:T16];[temp k] = size(t16); t4 = linspace(0,4*T16,4*k);t8 = linspace(0,2*T16,2*k); [temp i] = size(t4);[temp j] = size(t8); % Modification func…
Description 题库链接 在集合 \(S=\{1,2,...,n\}\) 中选出 \(m\) 个子集,满足三点性质: 所有选出的 \(m\) 个子集都不能为空. 所有选出的 \(m\) 个子集中,不能存在两个完全一样的集合. 所有选出的 \(m\) 个子集中, \(1\) 到 \(n\) 每个元素出现的次数必须是偶数. \(1\leq n,m\leq 1000000\) Solution 一开始想着去容斥出现奇数次的元素.发现是 \(O(n^2)\) 的.只好去颓题解了... 转化一下思…
题目传送门 传送点 题目大意 给定$n$个标号依次为$1, 2, \cdots, n$的点,其中一些点被染成一些颜色,剩下的点没有染色.你需要添加一些有向边并将剩下的点染色,满足有向边从编号小的一端指向编号大的一端,图中所有黑白相错的路径的条数与$p$对2取模同余. $1\leqslant n\leqslant 10^6$ 想一下如何求DAG中黑白相错的路径的条数.用$g_{i}$表示$i$结尾的路径的条数. 考虑怎么转移,枚举前一个点,然后$g_{i} += g_{pre}[col_{pre}…
容易发现这是一个有各种玄妙性质的完全背包计数. 对于每个质数,将其选取个数写成ax+b的形式,其中x=S/pi,0<b<x.那么可以枚举b的部分提供了多少贡献,多重背包计算,a的部分直接组合数即可.多重背包计数可以前缀和优化. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algor…
这是一道很好的组合数学题. 对于和我一样五音里面有六音不全的人来说,我们就应该转换一下题目的意思: 一句话题意: 题目的意思就是说要从一个有 n 个元素的集合当中选出一个长度为m的集合,然后满足: 1.无序性 2.这每个音阶出现的次数为偶数 3.这些元素满足单一性 4.不为空集 所以考虑组合::: 上过高中的应该都知道,一个拥有 n 个元素的集合,那么它的子集的数量就是 \(2^n\) - 1,那么对于每一个 \(i\),组合的数量就是 \(A_{2^n-1}^{i-1}\) ,之后我们可以发现…