ABC156D
[题目链接]https://atcoder.jp/contests/abc156/tasks/abc156_d
简单数论问题,题意就是有n个数,不能组成a与b个数,问有多少种组合方式
那就是C(n,1)+C(n,2)+....+C(n,n)-C(n,a)-C(n,b)
和式部分为2^n-1
由于a,b的范围在2e5,直接运用逆元+原始定义求两个组合数就行了
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x)&(-x))
typedef long long LL;
const LL MOD = 1e9+7;
void ex_gcd(LL a, LL b, LL& x, LL& y) {
if(!b) {
x = 1, y = 0;
} else {
ex_gcd(b, a%b, y, x);
y -= x * (a / b);
}
}
LL inv(LL t, LL p) {
LL x, y, d;
ex_gcd(t, p, x, y);
return (x%p+p)%p;
}
LL quick_pow(LL a, LL b, LL p) {
LL ret = 1;
while(b) {
if(b & 1) ret = (ret * a) % p;
a = (a * a) % p;
b >>= 1;
}
return ret;
}
void run_case() {
LL n, a, b;
cin >> n >> a >> b;
if(n <= 2) {
cout << "0";
return;
}
LL all = quick_pow(2, n, MOD) - 1;
LL fa = 1, fb = 1;
// get a! and b!
for(LL i = a; i >= 1; --i)
fa = (fa * i) % MOD;
for(LL i = b; i >= 1; --i)
fb = (fb * i) % MOD;
LL n1 = 1, n2 = 1;
// get n*(n-1)---*(n-a+1)
for(LL i = n; i >= n-a+1; --i)
n1 = (n1 * i) % MOD;
for(LL i = n; i >= n-b+1; --i)
n2 = (n2 * i) % MOD;
//get MOD inverse
LL invfa = inv(fa, MOD), invfb = inv(fb, MOD);
all = ((all - n1*invfa%MOD)+MOD)%MOD;
all = ((all - n2*invfb%MOD)+MOD)%MOD;
cout << all;
}
int main() {
ios::sync_with_stdio(false), cin.tie(0);
cout.flags(ios::fixed);cout.precision(10);
run_case();
cout.flush();
return 0;
}
ABC156D的更多相关文章
- AT5341 [ABC156D] Bouquet 题解
Content 有一个人有 \(n\) 种不同的话可供选择,TA 可以选择至少一种花做花束,但是 TA 不喜欢花的种数为 \(a\) 或者 \(b\) 的花束.求选花的方案数对 \(10^9+7\) ...
随机推荐
- AndroidBDMap学习01:基于百度地图SDK的配置以及利用API实现一个简单的地图应用
(一)注册并获取AK码: step1:找到keytool工具,并转移到.android目录下.(前提是已经安装了java jre/jdk) 为避免有些情况,在控制台无法找到keytool,可以把与k ...
- java 判断数据是否为空
/** * 方法描述:自定义判断是否为空 * 创建作者:李兴武 * 创建日期:2017-06-22 19:50:01 * * @param str the str * @return the bool ...
- php多版本使用composer
适用多版本的方法 1:下载composer.phar,官网有直接下载的链接,https://getcomposer.org/download/ 2:composer.phar 复制到项目根目录 3:p ...
- ASP.NET + MVC5 入门完整教程五 --- Razor (模型与布局)
https://blog.csdn.net/qq_21419015/article/details/80451895 1.准备示例项目 为了演示Razor,使用VS创建一个名称为“Razor”的新项目 ...
- zabbix监控规划及实施
一.规划监控拓扑 二.主机分组 例:交换机.Nginx.Tomcat.MySQL 三.监控对象识别: 1.使用SNMP监控交换机 a.交换机开启snmp config -t snmp-server c ...
- 使用 navigator.sendBeacon() 上报数据
http://kaifage.com/notes/76/navigator-sendBeacon.html 如某些统计系统,在页面unload时,如果要上报当前数据,采用xhr的同步上报方式,会阻塞当 ...
- FLV文件格式分析(附源码)
FLV文件主要由两部分组成:Header和Body. 1. Header header部分记录了flv的类型.版本等信息,是flv的开头,一般都差不多,占9bytes.具体格式如下: 文件类型 3 b ...
- java位移运算符|And&,操作二进制
在java中 逻辑运算符有四种:& , |, &&, || &: 如果第一个条件是fasle,还会判断第二个条件,只要有一个条件不满足,结果就返回false; ...
- 【转载】Java的JDBC事务详解
转自:http://www.cnblogs.com/azhqiang/p/4044127.html 事务的特性: 1) 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单 ...
- docker删除镜像时报错解决办法
报错信息 [root@kvm ~]# docker rmi 4950a54ede5a Error response from daemon: conflict: unable to delete 49 ...