stone (组合数学 + Lucas定理)
传送门
解题思路:第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定理)相关推荐
- szucodeforce训练1081C组合数学lucas定理,div2 627的D dfs +剪枝优化,697D Puzzles{dfs序+概率}
给你n个方格排成一行,有m种颜色,然后要把这n个方格分成k+1段,每段涂不同的颜色,问有多少种方法. 组合数学Lucas定理 排列组合问题,首先要在n-1个位置里面选出k个位置当作段与段的分割点,然后 ...
- 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 < ...
- 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] ...
- [学习笔记]扩展LUCAS定理
可以先做这个题[SDOI2010]古代猪文 此算法和LUCAS定理没有半毛钱关系. [模板]扩展卢卡斯 不保证P是质数. $C_n^m=\frac{n!}{m!(n-m)!}$ 麻烦的是分母. 如果互 ...
- 【数论-Lucas定理】
1.写在前面:我始终觉得,对于一个问题要知其然,更要知其所以然.Lucas定理在刚刚接触数论的时候就知道了,因为这是一个很常用的定理,常常和中国剩余定理放在一起考.最近在组合数学上出现了很多问题,但是 ...
- Lucas定理与大组合数的取模的求法总结
Lucas定理与大组合数的取模的求法总结 分类: ACMer 数学 2012-03-11 09:38 1219人阅读 评论(0) 收藏 举报 c 首先给出这个Lucas定理: A.B是非负整数 ...
- 数论(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 ...
- 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 ...
- 【BZOJ1951】【SDOI2010】古代猪文 Lucas定理、中国剩余定理、exgcd、费马小定理
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
最新文章
- Python中numpy数组的拼接、合并
- pycharm+itk+vtk安装及测试程序运行
- linux shell只读变量、删除变量
- 原生js绑定click为什么点一次执行两次_前端小知识10点(2020.10.8)
- MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置
- Arm架构下VUE环境的安装
- python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!
- 博弈——威佐夫博弈(hdu1527,2177)
- 操作系统思考 第六章 内存管理
- svn 迁移到git下全过程
- android中使用setVideoURI()播放视频
- Mac系统最强虚拟机(支持Big Sur)
- layui select 默认选中 vue select 动态选中
- 「Java代码审计」Java代码审计基础知识「一」
- cppm报考条件,看下您符合报考CPPM吗?
- 最新引流脚本之窃语漂流瓶引流脚本,如何使用窃语脚本
- Centos服务器上使用移动硬盘(NTFS分区)
- Photoshop学习(十四):使用快速蒙版
- 电脑ssl协议 linux,基于ssl协议和openssl工具建立私有CA
- 如何在opensolaris2008.05清除root密码