传送门戳我

首先将n减去所有的Ci,于是是原问题转换为:n个相同的球放入m个不同盒子里,不能为空,求方案数.

根据插空法:n个球,放到m个箱子里去不能为空,也就是有m-1块板子放在n-1个空隙之间

那么组合数求解也就是C(n-1,m-1)

除法求余有误差所以先求分母的逆元,转化为分子*逆元%mod的形式

在模为素数p的情况下,有费马小定理

a^(p-1)=1(mod p)

那么a^(p-2)=a^-1(mod p)

也就是说a的逆元为a^(p-2)

那么快速幂一下求逆元就好了。

#include <bits/stdc++.h>
using namespace std;
const int mod=1000000007;
const int maxn=1000009;
typedef long long ll;
int n,m;
ll fc[maxn+10];
ll quickpow(ll a,ll n)
{
ll ans=1;
while(n)
{
if(n&1) ans=ans*a%mod;
a=a*a%mod;
n>>=1;
}
return ans;
}
ll C(int n,int k)
{
ll fm=fc[k]*fc[n-k]%mod;//求b的逆元
//因为a/b%mod,除法取模会出现问题,所以要求逆元
return fc[n]*quickpow(fm,mod-2)%mod;
}
int main()
{
fc[0]=1;
for(int i=1;i<=maxn;i++)
fc[i]=fc[i-1]*i%mod;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
ll l;cin>>l;
n-=l;
}
//n个苹果,放到m个箱子里去不能为空
//也就是有m-1块板子放在n-1个空隙之间
cout<<C(n-1,m-1);
}

最新文章

  1. 介绍几个好用的vs插件
  2. BZOJ2809: [Apio2012]dispatching
  3. Android开发 代替 “(XXXX)findViewById()”
  4. Android应用开发SharedPreferences存储数据的使用方法
  5. 转载:Solr的自动完成实现方式(第三部分:Suggester方式续)
  6. 重启nginx
  7. 淘宝(阿里百川)手机客户端开发日记第十五篇 JSON解析(四)
  8. java 16 -11 ArrayList存储自定义对象并增强for遍历
  9. windows 查 mac
  10. USACO 2017 February Gold
  11. vue版 弹幕
  12. java包名命名规范[【转】
  13. avr定时器做的正弦波
  14. FileReader.FileWriter 执行文本复制
  15. Android友盟增量更新
  16. CGI servlet Applet Scriptlet Scriptlet JSP data layer(数据层),business layer(业务层), presentation layer(表现层)
  17. SVN概述
  18. css3效果隔两秒旋转然后停两秒再继续旋转,无限循环
  19. 剑指offer五十七之二叉树的下一个结点
  20. 【分布式消息队列-MQ】

热门文章

  1. [leetcode]1379. Find a Corresponding Node of a Binary Tree in a Clone of That Tree
  2. 多级菜单初写(dict使用)
  3. Odoo 查看 模块app 对应的 源码 相关依赖模块信息
  4. AJ学IOS 之BLOCK的妙用_利用block实现链式编程
  5. Spring Cloud 系列之 Gateway 服务网关(一)
  6. Python-selenium安装与Java-selenium安装
  7. 解决vue element table行列不齐问题
  8. CTFHub web技能树 RCE
  9. Chrome 浏览器安装 ChroPath 插件
  10. [HTML] &lt;base&gt;链接默认打开方式标签元素