传送门
解题思路:第i组的人数必须大于Ci,于是我们可以将问题转化为\(N-\sum_{i=1}^M Ci\)人分到M组中,且保证每一组的人数大于0,然后我们可以使用隔板法求出分的的组数\(C_{N-1-\sum_{i=1}^M Ci}^{m-1}\)
我们可以直接通过基本的组合公式+费马小定理直接求,也可以通过Lucas定理求得:
直接求:
Code:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
ll n,m,a,t;ll power(ll a,ll b) {ll ans = 1;while(b) {if(b&1) ans = (ans*a)%mod;a = (a*a)%mod;b>>=1;}return ans;
}ll inv(ll x) {return power(x,mod-2);
}ll C(ll a,ll b) {ll ans =  1;for(ll i = 1;i <= b; ++i) {ans = (ans*(a-i+1)) % mod;ans = (ans*inv(i)) % mod;}return ans % mod;
}int main()
{while(~scanf("%lld%lld",&n,&m)) {a = 0LL;for(int i = 0;i < m; ++i) {scanf("%lld",&t);a += t;}printf("%lld\n",C(n-a-1,m-1));}return 0;
}

Lucas定理:

#include <iostream>
#include <cstdio>
using namespace std;#define MOD 1000000007
typedef long long LL;int Read() { //快读char c; int ans(0);while(!isdigit(c = getchar()));do ans = ans * 10 + c - 48;while(isdigit(c = getchar()));return ans;
}int n, m;LL Qpow(LL a, LL b, LL p) { //快速幂 LL ans = 1;for(; b; b>>=1, (a*=a) %= p)if(b & 1) (ans *= a) %= p;return ans;
}LL c(LL n, LL m, LL p) {if(n < m) return 0;if(m > n - m) m = n - m;LL s1 = 1, s2 = 1;for(int i=0; i<m; i++) {s1 = s1 * (n - i) % p;s2 = s2 * (i + 1) % p;}return s1 * Qpow(s2, p-2, p) % p;
}LL Lucas(LL n, LL m, LL p) { //Lucasif(m == 0) return 1;return c(n % p, m % p, p) * Lucas(n / p, m / p, p) % p;
}int main() {n = Read(), m = Read();for(int i=1; i<=m; i++) n -= Read();printf("%d\n", Lucas(n-1, m-1, MOD));return 0;
}

stone (组合数学 + Lucas定理)相关推荐

  1. szucodeforce训练1081C组合数学lucas定理,div2 627的D dfs +剪枝优化,697D Puzzles{dfs序+概率}

    给你n个方格排成一行,有m种颜色,然后要把这n个方格分成k+1段,每段涂不同的颜色,问有多少种方法. 组合数学Lucas定理 排列组合问题,首先要在n-1个位置里面选出k个位置当作段与段的分割点,然后 ...

  2. HDU 5226 Tom and matrix(组合数学+Lucas定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5226 题意:给一个矩阵a,a[i][j] = C(i,j)(i>=j) or 0(i < ...

  3. Lucas定理及组合数取模

    首先给出这个Lucas定理: A.B是非负整数,p是质数.AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]. 则组合数C(A,B)与C(a[n],b[n] ...

  4. [学习笔记]扩展LUCAS定理

    可以先做这个题[SDOI2010]古代猪文 此算法和LUCAS定理没有半毛钱关系. [模板]扩展卢卡斯 不保证P是质数. $C_n^m=\frac{n!}{m!(n-m)!}$ 麻烦的是分母. 如果互 ...

  5. 【数论-Lucas定理】

    1.写在前面:我始终觉得,对于一个问题要知其然,更要知其所以然.Lucas定理在刚刚接触数论的时候就知道了,因为这是一个很常用的定理,常常和中国剩余定理放在一起考.最近在组合数学上出现了很多问题,但是 ...

  6. Lucas定理与大组合数的取模的求法总结

    Lucas定理与大组合数的取模的求法总结 分类: ACMer 数学 2012-03-11 09:38  1219人阅读  评论(0)  收藏  举报 c 首先给出这个Lucas定理: A.B是非负整数 ...

  7. 数论(Lucas定理) HDOJ 4349 Xiao Ming's Hope

    题目传送门 题意:求C (n,0),C (n,1),C (n,2)...C (n,n)中奇数的个数 分析:Lucas 定理:A.B是非负整数,p是质数.AB写成p进制:A=a[n]a[n-1]...a ...

  8. BZOJ 2111 [ZJOI2010]Perm 排列计数:Tree dp + Lucas定理

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2111 题意: 给定n,p,问你有多少个1到n的排列P,对于任意整数i∈[2,n]满足P[i ...

  9. 【BZOJ1951】【SDOI2010】古代猪文 Lucas定理、中国剩余定理、exgcd、费马小定理

    Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...

最新文章

  1. Python中numpy数组的拼接、合并
  2. pycharm+itk+vtk安装及测试程序运行
  3. linux shell只读变量、删除变量
  4. 原生js绑定click为什么点一次执行两次_前端小知识10点(2020.10.8)
  5. MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置
  6. Arm架构下VUE环境的安装
  7. python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!
  8. 博弈——威佐夫博弈(hdu1527,2177)
  9. 操作系统思考 第六章 内存管理
  10. svn 迁移到git下全过程
  11. android中使用setVideoURI()播放视频
  12. Mac系统最强虚拟机(支持Big Sur)
  13. layui select 默认选中 vue select 动态选中
  14. 「Java代码审计」Java代码审计基础知识「一」
  15. cppm报考条件,看下您符合报考CPPM吗?
  16. 最新引流脚本之窃语漂流瓶引流脚本,如何使用窃语脚本
  17. Centos服务器上使用移动硬盘(NTFS分区)
  18. Photoshop学习(十四):使用快速蒙版
  19. 电脑ssl协议 linux,基于ssl协议和openssl工具建立私有CA
  20. 如何在opensolaris2008.05清除root密码

热门文章

  1. Matlab之矩阵的特征值与特征向量求解
  2. 使用Adobe acrobat压缩pdf大小
  3. PyTorch 中如何指定GPU
  4. RDS for mysql备份恢复到本地参考文档
  5. 并发编程的那些事。(一)
  6. 《JavaScript高级程序设计》Chapter 10 DOM
  7. 根据XPATH去查看修改xml文件节点的内容
  8. 开发一个手游需要的工种
  9. 《Android开发从零开始》——31.模拟Http请求
  10. Helpful links