[题目链接]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的更多相关文章

  1. AT5341 [ABC156D] Bouquet 题解

    Content 有一个人有 \(n\) 种不同的话可供选择,TA 可以选择至少一种花做花束,但是 TA 不喜欢花的种数为 \(a\) 或者 \(b\) 的花束.求选花的方案数对 \(10^9+7\) ...

随机推荐

  1. 搭建Hexo实现个人网站详细教程

    全网最全小白搭建Hexo+Gitee/Coding/Github 全网最全小白搭建Hexo+Gitee/Coding/Github 本站内容已全部转移到https://www.myyuns.ltd,具 ...

  2. ConsoleWindow中的双击日志定位

    很多项目都有自己重写Debug.Log的习惯,难免会遇到在Unity的Console窗口中双击日志, 但是没法直接跳转到想要看到的代码那一行的时候,解决办法有以下2种: 将自己封装的日志类制作成DLL ...

  3. 关于memset....我太难了

    众所周知memset是个清空数组的好东西 然而...它慢的要死 直接让我从30ms炸到1045ms 于是快乐tle .... 是我的错 所以以后还是手动清空 (我真快乐)

  4. [lua]紫猫lua教程-命令宝典-L1-01-09. string字符串函数库

    L1[string]01. ASCII码互转 小知识:字符串处理的几个共同的几点 1.字符串处理函数 字符串索引可以为负数 表示从字符串末尾开始算起 所有字符串处理函数的 字符串索引参数都使用 2.所 ...

  5. D. Easy Problem dp(有衔接关系的dp(类似于分类讨论) )

    D. Easy Problem dp(有衔接关系的dp(类似于分类讨论) ) 题意 给出一个串 给出删除每一个字符的代价问使得串里面没有hard的子序列需要付出的最小代价(子序列不连续也行) 思路 要 ...

  6. 发送数据给sap和接收

    1.确保已经连通sap 2.发送数据:这是以表的形式发送,而且是批量发送给sap 3.接收sap返回信息:这个比较特别,碰到时试一试 package com.yiyezhiqiu.lyh.utils; ...

  7. Django_Setings

    """ Django settings for untitled1 project. Generated by 'django-admin startproject' u ...

  8. selenium定位方法-iframe元素定位方法

    在自动化测试中,如果无法定位到一个元素,那么最大的可能是定位的元素是在iframe框架中,iframe对象代表一个HTML的内联框架,在HTML中,iframe每出现一次,一个iframe对象就会被创 ...

  9. curl模板----php发送post,get请求

    function _grab($curl,$ip='',$referer='',$postInfo='',$cookie=''){ $ch = curl_init(); curl_setopt($ch ...

  10. XSS 3

    打开第三题然后会看到 然后进行一下添加数据 然后会发现数据被添加到 value=""双引号中然后然后我们会想到提前闭合 代码 然后进行编码 然后就可以通过了 此题与xss 2类似 ...