P3214 [HNOI2011] 卡农

文章目录

  • 代码
  • 题解
    • 前言
    • 正文
    • 要素

代码

#include <bits/stdc++.h>
using namespace std;#define ll long longconst int N = 1000009;ll MOD = (ll)(1e8 + 7),f[N],n,m,p2n = 1,sum,A[N],f_m = 1;ll power(ll x,ll p,ll M)
{ll res = 1;while(p){if( p & 1 ) ( res *= x ) %= M;( x *= x ) %= M;p >>= 1;}return res;
} int main()
{cin >> n >> m;for (int i = 1; i <= n; ++i) ( p2n *= 2 ) %= MOD;sum = p2n - 1;//片段总数   这里不用取摸A[0] = 1;for (int i = 1; i <= m; ++i)//算排列数{A[i] = A[i - 1] * (sum - i + 1 + MOD) % MOD;( f_m *= i ) %= MOD;}f[1] = 0;//所有都是奇数,所以一个都不算f[2] = 0;//无解for (int i = 3; i <= m; ++i){f[i] = A[i - 1] - f[i - 1] - f[i - 2] * (i - 1) % MOD * ( ( sum - (i - 2) + MOD ) % MOD ) % MOD;//      保证偶数      去空集       去重复f[i] = ( MOD + f[i] % MOD ) % MOD;}   cout << f[m] * power(f_m,MOD - 2,MOD) % MOD;return 0;
}

题解

前言

一开始推DP+容斥,以奇数个数为状态转移,想了半天没推出来,看了题解之后才发现以确定合法子集个数为状态+容斥更简单

正文

DP+容斥

首先,题目中要求组合,一直求组和的话要求很多逆元(因为取模),也可以先算排列,到最后答案乘上 (m!)−1(m!)^{-1}(m!)−1 ,本文求的是排列。

设 fif_ifi​ 为确定了前i个子集的方案数,每个方案数的子集都满足①每个数字出现偶数次,②不是空集,③不重合。

对于①:只需要确定前 i−1i-1i−1 个子集,就可以确定第 iii 个子集(这个子集内包含了前 iii 个子集中出现次数为奇数的数字)。随边选前 i−1i-1i−1 的状态数为 Asumi−1A_{sum}^{i-1}Asumi−1​ ,接下来考虑容斥。

对于②:第 iii 个为空集时,前 i−1i-1i−1 已经合法,个数为 fi−1f_{i-1}fi−1​ ,减去即可

对于③:如果第 jjj 个子集和第 iii 个子集相同,那么剩下的 i−2i-2i−2 个子集合法,那么就可以从 fi−2f_{i-2}fi−2​ 来推出此处不合法的状态数(这里可以推,是因为每个 fi−2f_{i-2}fi−2​ 的方案都可以转换到当前的非法状态,每个当前的非法状态可以转换到 fi−2f_{i-2}fi−2​ 中的方案,每个都是有对应的,但不是一一对应,存在口胡嫌疑 )。因为排列,所以 jjj 的位置也要考虑,有 i−1i-1i−1 个,每个 fi−2f_{i-2}fi−2​ 中的方案可以添加两个一样的子集,选择有 sum−(i−2)sum - (i-2)sum−(i−2) ,因此非法状态数有 fi−2×(i−1)×[sum−(i−2)]f_{i-2} \times (i-1) \times [sum - (i - 2)]fi−2​×(i−1)×[sum−(i−2)]

因此有转移方程 fi=Asumi−1−f[i−1]−fi−2×(i−1)×[sum−(i−2)]f_i = A_{sum}^{i-1} - f[i - 1] - f_{i-2} \times (i-1) \times [sum - (i - 2)]fi​=Asumi−1​−f[i−1]−fi−2​×(i−1)×[sum−(i−2)]

要素

多个要求,分开处理,且有先后关系,明显的是①和③。
一开始我以为①是最难解决的,但是经过一个略微的小思考(随便选前 i−1i-1i−1 个,就可以确定第 iii 个,这个地方似乎可以这样想:先不管偶数的约束,随便选(放开约束,再对子集提新的要求,从而转化约束),大概是可以发现只要再选一个特定子集,就可以满足要求),就可以把难点转化到③上。
想挖掘一点本质的东西,但功力不够,想不出。。。

P3214 [HNOI2011] 卡农 题解相关推荐

  1. [HNOI2011] 卡农 题解

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

  2. [BZOJ2339][HNOI2011]卡农

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

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

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

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

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

  5. 【luogu P3214】卡农(数学)(DP)

    卡农 题目链接:luogu P3214 题目大意 有 n 种元素,然后你要选 m 个互不相同的集合,满足里面有元素且在 n 种之间,每种至多一个,且每个元素在偶数个集合中出现过. 问你有多少种选法. ...

  6. [HNOI2011]卡农

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

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

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

  8. HNOI 2011 卡农 题解

    题目传送门 题目大意: 有一个集合 { 1 , 2 , . . . , n } \{1,2,...,n\} {1,2,...,n},你要选出他的若干个子集组成长度为 n n n 的序列,满足:不存在相 ...

  9. HNOI2011 卡农

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

最新文章

  1. HTML5 Dashboard – 那些让你激动的 Web 技术
  2. numpy.ravel() vs numpy.flatten()
  3. 【Caffe实践】 添加自己的网络层
  4. conda指定路径_导出不带前缀变量的conda环境,该变量显示executab的本地路径
  5. 【软件测试】单元测试的主要任务不包括全局数据结构
  6. (亲测)Hbase安装(傻瓜式安装)
  7. css3学习总结9--CSS3过渡
  8. C++ std::vector 容器 是什么
  9. JS点击图片后图片放大效果
  10. 后盾网php多少钱_后盾网向军老师PHP视频教程
  11. 3D数据基础——向量介绍与3D向量类的实现
  12. 新手传奇gm架设要学会的几个修改技巧
  13. 我真的不懂微信营销(一)
  14. D435i运行VINS
  15. 满二叉树和完全二叉树的区别
  16. 入侵检测与防御技术基础
  17. @Inject 注解的使用
  18. 【面试技巧】你对我们公司了解多少
  19. 芯片和CPU有什么不同?解析CPU制造全过程 - 全文
  20. 全球十大正规黄金期货交易APP平台排名(2023版榜单)

热门文章

  1. Unknown symbol crc32c
  2. 实现用户端的充值、修改密码、查看个人信息、保存用户的信息到文件操作
  3. 欧盟汽车安全机构测评辅助驾驶,特斯拉Autopilot“严重偏科”-1
  4. AIX5.3上使用smit installp 安装Python 3.5.2
  5. 安可与普通测评的区别_等级保护、风险评估和安全测评三者之间的区别与联系...
  6. 不动产纠纷包括房屋买卖合同吗
  7. 01.计算机基础与Java
  8. 美标C70600(BFe10-1-1)无缝管
  9. linux下Git代理设置
  10. 陈年不能输,雷军不敢输