传送门:Chat Group(gym101775A)

题意:一个宿舍中又n个人,最少k(k >= 3)个人就可以建一个讨论组,问最多可以建多少个不同的讨论组。

思路:求组合数的和,因为涉及除法取余,所以要求逆元来解题。

虽然之前看到过有关逆元的知识,但是一直没有弄明白逆元的应用。嗯~~挖下的坑终于把自己给坑了。这次认栽!!

最终的结果是:C(n,k)+C(n,k+1)+.......+C(n,n) = 2^n - ( C(n,0) + C(n,1) + C(n,2) + ......+C(n,k-1)

(a / b)%mod = a % mod *(b关于模mod的逆元);

复习逆元相关知识:Click hear

代码:

费马小定理求逆元法:

#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9+;
const int maxn = 1e5;
typedef long long ll;
int n,k;
ll qpow(ll a,ll b)
{
ll res = ;
while(b)
{
if(b&)
res = res*a%MOD;
a = a*a%MOD;
b>>=;
}
return res;
} int main()
{
int T,cnt = ;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
ll c = ;
ll sum = ;
for(int i = ; i<=k-; i++)
{
c = ((c*(n-i+)%MOD)*qpow(i,MOD-))%MOD;
sum = (sum + c)%MOD;
}
ll M = qpow(,n) - ;
printf("Case #%d: %lld\n",++cnt,(M - sum + MOD)%MOD);//将结果转为正数
}
return ;
}

线性求逆元:

#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9+;
const int maxn = 1e5;
typedef long long ll;
int n,k;
ll qpow(ll a,ll b)
{
ll res = ;
while(b)
{
if(b&)
res = res*a%MOD;
a = a*a%MOD;
b>>=;
}
return res;
}
ll inv[maxn]; void getInv()
{
inv[] = ;
for(int i = ; i<maxn; i++)
{
inv[i] = (MOD-MOD/i)*inv[MOD%i]%MOD;
}
} int main()
{
int T,cnt = ;
scanf("%d",&T);
while(T--)
{
getInv();
scanf("%d%d",&n,&k);
ll c = ;
ll sum = ;
for(int i = ; i<=k-; i++)
{
c = (c*(n-i+)%MOD*inv[i])%MOD;
sum = (sum + c)%MOD;
}
ll M = qpow(,n) - ;
printf("Case #%d: %lld\n",++cnt,(M - sum + MOD)%MOD);
}
return ;
}

最新文章

  1. H5 video的使用
  2. 部署 OpenStack VirtualBox
  3. Java基础(60):Java打包生成Jar和Javadoc说明文档,以及在另外的工程中导入和使用自己的Jar
  4. JMS的常用方法
  5. 使用ORACLE SQL Tuning advisor快速优化低效的SQL语句
  6. Servlet API中文版
  7. 【4】学习JS 数据结构与算法笔记
  8. jsp fmt标签详解
  9. Android 实现UI设计
  10. VMware Workstation 14 Pro永久激活密钥
  11. OpenCV 填充(ROI)+模糊操作
  12. [Web 前端 ] Jquery attr()方法 获取或修改 对象的属性值
  13. purge recyclebin之后dba_segments仍然有BIN$段
  14. poj 3667 线段树
  15. 使用jQuery动态改变图片显示大小
  16. 《图解HTTP》书摘
  17. http头部信息
  18. Windows10+Ubuntu双系统安装[
  19. 基于容器微服务的PaaS云平台设计(一) 实现容器微服务和持续集成
  20. 网络设备之net_device结构与操作

热门文章

  1. JSP开发学习参考文章
  2. 布局技巧4:使用ViewStub
  3. IDEA Spark程序报错处理
  4. Linux VPS上安装KDE, Gnome和VNC
  5. [Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密
  6. AcWing算法基础1.5
  7. C 语言程序员必读的 5 本书
  8. 接口管理功能全面增强!EOLINKER EPC 5.0.9版本更新:支持LDAP用户系统、加入更多项目统计图表、强化测试/自动化测试功能等
  9. BZOJ 3779 LCT 线段树 DFS序 坑
  10. Spring思维课程导图——bean得实例化和bean的管理