题目链接
题目大意:
N个人,至少K个人就可以组成一个聊天组。问对于给出的N,K能有多少个不同的聊天组。
分析:一开始有点小懵逼,后来发现它的N个人可以不一定用完。那么相当于答案就是Σi=kn C(n,i) 因为n很大,k比较小。组合数约分后会发现我们只需要处理n!的后k个即可。利用逆元即可求出答案。 (签到难度)
signed main(){
ll t;
read(t);
ll ca=0;
while(t--){
ll n,k;
read(n);
read(k);
ca++;
a[0]=1;
ll cnt=1;
ll ans=1;
for(int i=1;i<k;i++){
a[i]=(a[i-1]*(n-i+1))%mods;
cnt=cnt*i%mods;
ans=ans+(qp(cnt,mods-2,mods)%mods*a[i]%mods)%mods;
ans=ans%mods;
}
printf("Case #%lld: %lld\n",ca,(qp(2,n,mods)%mods-ans+mods)%mods);
}
}