【扬中集训DAY1T1】 微信群
【题目链接】
【算法】
对问题稍加分析后,发现其实要求的就是 :
C(N,K) + C(N,K+1) + C(N,K+2) + ... + C(N,N)
因为N最大10^9,K最大10^5,很显然,我们不可能通过暴力或杨辉三角等来解决此题
我们发现 :
C(N,K) + C(N,K+1) + C(N,K+2) + ... + C(N,N)
= C(N,1) + C(N,2) + C(N,3) + ... + C(N,N) - C(N,1) - C(N,2) - ... - C(N,K-1)
= 2^N - 1 - C(N,1) - C(N,2) - ... - C(N,K-1)
同时,我们可以推出 : C(N,K) = C(N,K-1) * (N - K + 1) / K
我们可以通过这个递推式在O(K)的时间求出C(N,1)..C(N,K-1)
但是问题还没有完,由于这个式子要模10^9+7
因此在计算 C(N,K-1) * (N - K + 1) / K时,除法运算会变得十分棘手,我们怎么解决这个问题呢?
其实很简单,(a / b) mod P = (a * b的逆元)mod P,有了这个小结论,问题就迎刃而解了!
关于这个结论,具体的证明我就不给出了,详见这篇文章 :
http://blog.csdn.net/star_weeper/article/details/52973879
【代码】
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const ll MOD = 1e9 + ; ll i,N,K,a=,b=,ans; template <typename T> inline void read(T &x) {
ll f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
for (; isdigit(c); c = getchar()) x = x * + c - '';
x *= f;
} template <typename T> inline void write(T x) {
if (x < ) { putchar('-'); x = -x; }
if (x > ) write(x/);
putchar(x%+'');
} template <typename T> inline void writeln(T x) {
write(x);
puts("");
} inline ll pow_mod(ll a,ll n) {
ll ans;
if (!n) return ;
if (n == ) return a;
ans = pow_mod(a,n>>);
ans = ans * ans % MOD;
if (n & ) ans = ans * a % MOD;
return ans;
} inline void exgcd(ll a,ll b,ll &x,ll &y) {
if (b == ) {
x = ;
y = ;
} else {
exgcd(b,a%b,y,x);
y -= a / b * x;
}
} inline ll inv(ll a) {
ll x,y;
exgcd(a,MOD,x,y);
return (x % MOD + MOD) % MOD;
} int main() { read(N); read(K); ans = pow_mod(,N) - ; for (i = ; i < K; i++) {
a = (a * i) % MOD;
b = ((b % MOD) * ((N - i + ) % MOD)) % MOD;
ans = (ans - (b * inv(a)) % MOD) % MOD;
if (ans < ) ans += MOD;
} writeln(ans); return ; }
【扬中集训DAY1T1】 微信群的更多相关文章
- 一行实现QQ群组头像,微信群组,圆角等效果. 并支持url直接加载图片
说点题外话. Coding中我们总是经历着这么几个过程. 学会使用: 不管是API也好, 开源库也好. 总是在最开始的学会去用. 了解实现原理: 可能会因为一些不兼容, 代码的异常状态的处理不够完美等 ...
- 今天微信群需要人家通过吗?是微信bug吗
今天遇到微信群拉人的问题,所以来和大家取经,刚开始拉人一下就拉进去了,后来拉的需要人家通过,今天朋友些也帮我拉人也是这样的,所以想问下微信群扩容的问题.晚上有位朋友跟我说一次拉十个人,不能拉多,这样就 ...
- 微信群之Java技术红包问答
缘起 年前公司拿到B+轮融资,相应的在战略上也做了很大的调整,毕竟B轮要做的事情不仅仅是增加用户数,于是乎公司在2017年的开头补充了一部分技术团队,这次人员选择上主要针对一些工作经验在1-2年的技术 ...
- 基于itchat的微信群聊小助手基础开发(一)
前段时间由于要管理微信群,基于itchat开发了一个简单的微信机器人 主要功能有: 图灵机器人功能 群聊昵称格式修改提示 消息防撤回功能 斗图功能 要开发一个基于itchat的最基本的聊天机器人,在g ...
- python-itchat 统计微信群、好友数量的实例
今天小编就为大家分享一篇python-itchat 统计微信群.好友数量,及原始消息数据的实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 效果: 好友: # 获取自己的用 ...
- 环境与工具1:微信群刷屏 | itchat
在微信群里面,"刷屏"的行为是被谴责的,伴随着"快发红包道歉"与"送飞机票"的出现.那如果小程硬是要做到"刷屏"来验证自 ...
- 【组合数】微信群 @upcexam6016
时间限制: 1 Sec 内存限制: 128 MB 题目描述 众所周知,一个有着6个人的宿舍可以有7个微信群(^_^,别问我我也不知道为什么),然而事实上这个数字可以更大,因为每3个或者是更多的人都可以 ...
- 分享Azure DevOps技术,来微信群吧!
现在QQ用户越来越少,基本上都转移到微信上了. 讨论问题,动不动就来一个微信群.下面这样几百人的微信群,专门讨论Azure DevOps (TFS)技术,你加入了么? 还等什么,扫描吧!
- 微信群的id
今天网速慢了,竟然把微信群的id卡出来了,记录一下. 格式应该是一个像QQ群一样的数字,然后+@chatroom 看图! 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论.
随机推荐
- SPOJ MIXTURES 区间dp
Harry Potter has n mixtures in front of him, arranged in a row. Each mixture has one of 100 differen ...
- jquery的固定定位效果
今天做了个固定定位的效果.比如对导航需要进行固定定位效果: 当没有滚动到导航下面,导航正常显示. 当滚动到导航下面,导航就固定到顶部. 这个效果使用了jquery的方法实现,具体思路为: 1)首先获取 ...
- UVA 111
又被题意坑了... 输入的一串数字的含义是第i个数字是第a[i]个发生的.而不是编号为i的历史事件的实际发生顺序.所以第一步要做的是转换,将原始数据转换成编号为i的历史事件的实际发生顺序.然后按照实际 ...
- bzoj 4457: 游戏任务
4457: 游戏任务 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 128 Solved: 71[Submit][Status][Discuss] D ...
- Raft算法详解
一致性算法Raft详解 背景 熟悉或了解分布性系统的开发者都知道一致性算法的重要性,Paxos一致性算法从90年提出到现在已经有二十几年了,而Paxos流程太过于繁杂实现起来也比较复杂,可能也是以为过 ...
- MACBOOK 忘记密码
如果没有系统安装盘,可以采用下面的几种方法:首先,启动机器,启动时按住Apple和S键,以单用户模式(single user mode)进入系统.输入:mount -uv / 然后回车.接下来可以采用 ...
- Java修饰符关键字的顺序
Java语言规范建议按以下顺序列出修饰符: 1. Annotations 2. public 3. protected 4. private 5. abstract 6. static 7. fina ...
- perf stat 输出解读
http://zhengheng.me/2015/11/12/perf-stat/ http://zhengheng.me/2015/08/30/perf-tools/
- github/gitlab ssh-keys全局唯一
我们知道,通过在gitlab.github上设置ssh-key,可以直接拉取代码:git clone …… 公司为了代码安全,会对代码访问权限进行控制,不同人有不同代码的访问权限. 有时候,为了临时获 ...
- 碰撞检測之OBB-OBB的SweepTest
提要 当物体在运动的时候.普通的每帧进行碰撞检測已经无法满足要求,比方子弹的运动 两帧的位置已经直接将中间的板子穿过了,所以 t 时刻和 t +1 时刻的检測都是失效的.这时候须要用到的就是sweep ...