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 & ...
随机推荐
- java 必应壁纸批量下载
基于java 必应壁纸批量下载 - rookie丶k - 博客园 (cnblogs.com)实现 上面代码运行本地有点小问题,改了改 1.ssl验证 2.请求头 3.需要优化下载速度,多线程方式(还不 ...
- vue 事件监听和es6模板语法
es6模板语法的反引号是通过左上角的飘字符弄出来了,学废了吗?
- 虚拟机Centos7安装Socks5作为代理服务器
虚拟机Centos7安装Socks5作为代理服务器 1. 什么是代理服务器 代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到 ...
- pytest-rerunfailures/pytest-repeat重跑插件
在测试中,我们会经常遇到这种情况,由于环境等一些原因,一条case运行5次,只有两次成功 其它三次失败,针对这种概率性成功或失败,若是我们每次都运行一次就比较耗时间,这个时候 就需要pytest提供的 ...
- python并行计算之mpi4py的安装与基本使用
技术背景 在之前的博客中我们介绍过concurrent等python多进程任务的方案,而之所以我们又在考虑MPI等方案来实现python并行计算的原因,其实是将python的计算任务与并行计算的任务调 ...
- [FJOI2021]游记
高一这条命早在\(NOIP\)就没了,现在不过是强行续命罢了,希望死的不要很难看. 高二重开一档,最后一条命了,希望能高二进队\(Orz\). \(Day -2\) 开始敲板子. 先写了个交互的题,猜 ...
- Codeforces 605D - Board Game(树状数组套 set)
Codeforces 题目传送门 & 洛谷题目传送门 事实上是一道非常容易的题 很容易想到如果 \(c_i\geq a_j\) 且 \(d_i\geq b_j\) 就连一条 \(i\to j\ ...
- 常见 js 数组方法使用详解
数组常用方法总结 concat filter map some every reduce sort includes join some every 语法:array.every(function(c ...
- SourceTree git 工作流
转载自:https://www.cnblogs.com/tian-xie/p/6264104.html 1. SourceTree是什么 拥有可视化界面的项目版本控制软件,适用于git项目管理 win ...
- MongoDB的搭建、参数
Mongodb官网:https://www.mongodb.com/ mkdir -r /data/db touch /data/log tar -zxvf mongodb-linux-x86_6 ...