洛谷传送门

BZOJ传送门

题目描述

众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则。他将声音分成 nnn 个音阶,并将音乐分成若干个片段。音乐的每个片段都是由 111 到 nnn 个音阶构成的和声,即从 nnn 个音阶中挑选若干个音阶同时演奏出来。为了强调与卡农的不同,他规定任意两个片段所包含的音阶集合都不同。同时为了保持音乐的规律性,他还规定在一段音乐中每个音阶被奏响的次数为偶数。现在的问题是:小余想知道包含 mmm 个片段的音乐一共有多少种。两段音乐 aaa 和 bbb 同种当且仅当将 aaa 的片段重新排列后可以得到 bbb。例如:假设 aaa

为{{1,2},{2,3}}\{\{1,2\},\{2,3\}\}{{1,2},{2,3}},bbb 为{{3,2},{2,1}}\{\{3,2\},\{2,1\}\}{{3,2},{2,1}},那么 aaa 与 bbb 就是同种音乐。由于种数很多,你只需要

输出答案模 100000007100000007100000007(质数)的结果。

输入输出格式

输入格式:

从文件input.txt中读入数据,输入文件仅一行,具体是用空格隔开的两个正整数nnn和mmm,分别表示音阶的数量和音乐中的片段数。20%20\%20%的数据满足n,m≤5n,m≤5n,m≤5,50%50\%50%的数据满足n,m≤3000n,m≤3000n,m≤3000,100%100\%100%

的数据满足n,m≤1000000n,m≤1000000n,m≤1000000。

输出格式:

输出文件 output.txt 仅包含一个非负整数,表示音乐的种数模 100000007100000007100000007 的结果。【输入输出样例】

输入输出样例

输入样例#1:

2 3

输出样例#1:

1

解题分析

题目无非是让我们在选子集的时候满足三个条件:

  1. 选的每个元素都出现偶数次
  2. 选的子集不为空
  3. 不能选重复的子集

假设我们正在考虑计算dp[i]dp[i]dp[i]。如果只要求满足第一个要求, 直接确定i−1i-1i−1个之前选的子集, 第iii个子集就唯一确定了, 所以这里算出来的方案数是(2n−1i−1)×(i−1)\binom{2^n-1}{i-1}\times (i-1)(i−12n−1​)×(i−1)。

然后考虑为空的限制, 发现当且仅当前i−1i-1i−1个本身就满足条件才会导致第iii个为空, 所以减去dp[i−1]dp[i-1]dp[i−1]即可。

最后一个限制, 发现只可能是第iii个和前i−1i-1i−1个中的一个重复了, 那么剩下的i−2i-2i−2个就是合法的了, 也就是dp[i−2]dp[i-2]dp[i−2]。 重复的一个的选法有(2n−1)−(i−2)(2^n-1)-(i-2)(2n−1)−(i−2), 然后重复的那个子集在i−1i-1i−1个子集中有i−1i-1i−1个不同的位置, 因此这一部分减去的贡献是dp[i−2]×(i−1)×(2n−1−(i−2))dp[i-2]\times (i-1)\times (2^n-1-(i-2))dp[i−2]×(i−1)×(2n−1−(i−2))。

代码如下:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <cstdlib>
#define R register
#define IN inline
#define W while
#define gc getchar()
#define ll long long
#define MX 1005000
#define MOD 100000007
int A[MX], dp[MX];
int pw, n, m, fac = 1;
IN int fpow(R int base, R int tim)
{int ret = 1;W (tim){if (tim & 1) ret = 1ll * ret * base % MOD;base = 1ll * base * base % MOD, tim >>= 1;}return ret;
}
int main(void)
{scanf("%d%d", &n, &m);pw = (fpow(2, n) - 1 + MOD) % MOD;A[0] = 1;for (R int i = 1; i <= m; ++i) A[i] = 1ll * (pw - i + 1 + MOD) % MOD * A[i - 1] % MOD, fac = 1ll * fac * i % MOD;dp[0] = 1, dp[1] = 0;for (R int i = 2; i <= m; ++i) dp[i] = ((A[i - 1] - dp[i - 1] - 1ll * dp[i - 2] * (i - 1) % MOD * (pw - (i - 2)) % MOD) % MOD + MOD) % MOD;printf("%lld\n", 1ll * dp[m] * fpow(fac, MOD - 2) % MOD);
}

[Luogu P3214] [BZOJ 4339] [HNOI2011]卡农相关推荐

  1. P3214 [HNOI2011] 卡农 题解

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

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

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

  3. [BZOJ2339][HNOI2011]卡农

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

  4. [HNOI2011] 卡农 题解

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

  5. [HNOI2011]卡农

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

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

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

  7. HNOI2011 卡农

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

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

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

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

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

最新文章

  1. Oracle按照时间统计总结
  2. ansible笔记(11):初识ansible playbook(二)
  3. Python爬虫,通过特定的函数来筛选标签
  4. Qt中的QProgressDialog
  5. Python之pandas:pandas中to_csv()、read_csv()函数的index、index_col(不将索引列写入)参数详解之详细攻略
  6. go学习笔记-标准库
  7. TexBox.AutoCompleteSource
  8. html课表插件,课程表插件Timetables(原创)
  9. 试验ConcurrentHashmap
  10. PLECS软件学习使用(一)简单的RLC电路搭建
  11. 偷源代码!还和前东家一起投标……最终被判 3 年
  12. 修改笔记-批量去除附件售价
  13. 草蟒python汉化版_草蟒首页、文档和下载 - Python 汉化版 - OSCHINA - 中文开源技术交流社区...
  14. 熵权法求权重python代码
  15. 【转】3款Win7仿其他系统主题
  16. Python实战(07):使用selenium刷访问量
  17. Vue 数组/对象赋值,视图不更新问题
  18. Centos7云服务器部署SpringBoot项目(手动配置环境篇)
  19. 千亿级宠物赛道,卖蚊香的朝云能“掘金”多少?
  20. 根据贷款还款方式(等额本金,等额本息,等本等息,先息后本),计算本息

热门文章

  1. 江南爱软装十大品牌 房间想要舒适清新,选择蓝色系窗帘就可以
  2. Arduino——PAJ7620手势识别模块
  3. Leetcode典型题解答和分析、归纳和汇总——T89(格雷编码)
  4. 密码学应用--设计网络游戏斗地主
  5. mysql text not null_【20181101】MySQL text类型的column设置为NOT NULL 导致主从1364
  6. wirehark数据分析与取证B.pcap
  7. 碳中和专题系列2:电气化趋势下电力缺口的最终解(20210103).PDF
  8. mac Security CRT 破解
  9. 威马冲刺港股:年交付44152辆车 百度腾讯及成为背书
  10. 如何用蓝牙耳机连接xp输出音频