AT5341 [ABC156D] Bouquet 题解
Content
有一个人有 \(n\) 种不同的话可供选择,TA 可以选择至少一种花做花束,但是 TA 不喜欢花的种数为 \(a\) 或者 \(b\) 的花束。求选花的方案数对 \(10^9+7\) 取模。
数据范围:\(2\leqslant n\leqslant 10^9\),\(1\leqslant a<b\leqslant\min\{n,2\times 10^5\}\)。
Solution
简单的数数题。
我们先抛开『TA 不喜欢花的种数为 \(a\) 或者 \(b\) 的花束』这个条件不管,先来看如果是从 \(n\) 种花中选至少一种花作为花束的方案数。很显然,每种花都有『选』或者『不选』这两种状态,那么就一共有 \(2^n\) 种方案。但是又不能全部都不选,于是最终方案总数为 \(2^n-1\)。
我们再来看看不选种数为 \(a\) 或者 \(b\) 的方案总数。根据组合数的定义,我们可以很快求出选花的种数为 \(a\) 的方案总数为 \(C_n^a\),选花的种数为 \(b\) 的方案总数为 \(C_n^b\),又因为题目保证 \(a\neq b\),因此选花的种数为 \(a\) 或者 \(b\) 的方案总数为 \(C_n^a+C_n^b\)。
那么,最终的答案就呼之欲出了,为 \(2^n-1-C_n^a-C_n^b\)。
那么我们该如何求出答案呢?
首先,\(2^n\) 这个部分非常好办,直接上快速幂即可。
再然后就是组合数了。我们不妨先看到费马小定理和乘法逆元的定义。
- 费马小定理:如果 \(p\) 是质数,则对于任意整数 \(a\),都有 \(a^p\equiv a\pmod p\),或者 \(a^{p-1}\equiv 1\pmod p\)。
- 乘法逆元:如果 \(b,p\) 互质,且 \(b\mid a\),则我们存在一个整数 \(x\),使得 \(\dfrac ab\equiv a\cdot x\pmod p\)。
有了这两个东西,我们可以推导出 \(a\times a^{p-2}\equiv 1\pmod p\),从而在计算组合数的时候就不用除一个数 \(x\),直接乘上 \(x^{p-2}\) 即可达到相同的效果。
回到求组合数,由于 \(C_n^m=\dfrac{n!}{m!((n-m)!}=\dfrac{\prod\limits_{i=n-m+1}^ni}{m!}\),因此我们可以分两部分暴力去算出分子 \(a\) 和分母 \(b\),组合数就是 \(a\times b^{mod-2}\)。
这道题目就算做完了。
Code
const int N = 2e5 + 7, mod = 1e9 + 7;
ii ksm(int a, int b) {
int res = 1;
for(; b; b >>= 1, a = 1ll * a * a % mod) if(b % 2) res = 1ll * res * a % mod;
return res;
}
ii C(int n, int m) {
if(n < m || n < 0 || m < 0) return 0;
int res1 = 1, res2 = 1;
R(int, i, n, n - m + 1) res1 = 1ll * res1 * i % mod;
R(int, i, m, 1) res2 = 1ll * res2 * i % mod;
return 1ll * res1 * ksm(res2, mod - 2) % mod;
}
int main() {
int n = Rint, a = Rint, b = Rint, ans = ksm(2, n) % mod;
ans = (((ans - C(n, a) + mod) % mod - C(n, b) + mod) % mod - 1 + mod) % mod;
return println(ans), 0;
}
AT5341 [ABC156D] Bouquet 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- 『与善仁』Appium基础 — 10、Appium基本原理
目录 1.Appium自动化测试架构 2.Appium架构图 3.Session说明 4.Desired Capabilities说明 5.Appium Server说明 6.Appium Clien ...
- redis可以设置过期key回调实现延时队列
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...
- Codeforces 295D - Greg and Caves(dp)
题意: 给出一个 \(n \times m\) 的矩阵,需对其进行黑白染色,使得以下条件成立: 存在区间 \([l,r]\)(\(1\leq l\leq r\leq n\)),使得第 \(l,l+1, ...
- Cycling City CF521E
Cycling City 毒瘤题 首先建dfs树,由于是个无向图所有返祖边都是连向祖先的. 判是否有解其实很简单,只要图不是一个仙人掌就有解了. 仙人掌有关可以看这个博客 但是这道题由于要输出路径成功 ...
- 学习java的第七天
一.今日收获 1.看完全学习手册上java关键字与标识符两节 2.了解了java的关键字与标识符 二.今日难题 1.基本都理解 三.明日目标 1.继续看完全学习手册上的内容 2.加油!
- 15. Linux提取RPM包文件(cpio命令)详解
在讲解如何从 RPM 包中提取文件之前,先来系统学习一下 cpio 命令.cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复 ...
- Spark(八)【广播变量和累加器】
目录 一. 广播变量 使用 二. 累加器 使用 使用场景 自定义累加器 在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的 ...
- Linux学习 - 分区与文件系统
一.分区类型 1 主分区:总共最多只能分四个 2 扩展分区:只能有一个(主分区中的一个分区),不能存储数据和格式化,必须再划分成逻辑分区 才 ...
- Servlet(4):一个简单的注册页面
一. 注册要求 1. 一个注册页面 username (文本框) password:密码 (密码框) passwordYes :再次输入密码(密码框) hobby (多选框) sex (单选框) in ...
- Mave 下载与安装
一,Maven 介绍 我们在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还需要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要.Maven是当前最受欢迎 ...