洛谷 1680 奇怪的分组
来源:互联网 发布:苏联生活水平数据 编辑:程序博客网 时间:2024/06/04 00:30
题目链接:奇怪的分组
题目大意:给你一个n和m,然后是m个c[i],要求你将n个数分在m个组里面,第i个组的人数必须大于c[i],问你一共有多少中情况
题目思路:实际上就是从n中分出去sigma(C[i])个数,然后剩下的数假定是sum,则就有sum-1个空,需要插m-1个板子进去,就是高中学的插板法,实际上就是算组合数C(sum-1,m-1,1e9+7),直接套Lucas板子就可以了
#include<bits/stdc++.h>typedef long long LL;using namespace std;const int p = 1e9+7;LL exp_mod(LL a, LL b, LL p) { LL res = 1; while(b != 0) { if(b&1) res = (res * a) % p; a = (a*a) % p; b >>= 1; } return res;}LL Comb(LL a, LL b, LL p) { if(a < b) return 0; if(a == b) return 1; if(b > a - b) b = a - b; LL ans = 1, ca = 1, cb = 1; for(LL i = 0; i < b; ++i) { ca = (ca * (a - i))%p; cb = (cb * (b - i))%p; } ans = (ca*exp_mod(cb, p - 2, p)) % p; return ans;}LL Lucas(int n, int m, int p) { LL ans = 1; while(n&&m&&ans) { ans = (ans*Comb(n%p, m%p, p)) % p; n /= p; m /= p; } return ans;}int main() { int n,m,x; while(~scanf("%d%d",&n,&m)){ LL sum = 0; for(int i = 0;i < m;i++){ scanf("%d",&x); n -= x; } printf("%lld\n", Lucas(n-1,m-1,p)); } return 0;}
0 0
- 洛谷 1680 奇怪的分组
- 奇怪的分组(stone)
- 奇怪的分组 组合数
- 【洛谷 1135】 奇怪的电梯
- 洛谷 P1852 奇怪的字符串
- 洛谷 P1852 奇怪的字符串
- 洛谷 P1135 奇怪的电梯
- 洛谷 P1135 奇怪的电梯
- 洛谷 P1135 奇怪的电梯
- 洛谷 P2759 奇怪的函数
- 洛谷 P2759 奇怪的函数
- 洛谷p1135 奇怪的电梯
- (洛谷 1135)奇怪的电梯
- 水题-洛谷P2543 [AHOI2004]奇怪的字符串
- 洛谷 P1747 好奇怪的游戏
- 【洛谷】2759 奇怪的函数 公式变形
- 洛谷 P2543 [AHOI2004]奇怪的字符串
- 洛谷 奇怪的电梯 STL 版队列
- 响应式web设计——读书笔记
- java基础技术知识点总结——基本数据类型、引用、常量
- 保龄球得分计算
- 关于Fragment学习小结
- Android一些简单记录
- 洛谷 1680 奇怪的分组
- FileUpload组件(文件上传下载)
- maven dependencies已经引入了相应jar包,java编译的时候依然找不到类
- jquery中attr和prop的区别
- C++实验6——数组2
- 项目在多个Git之间迁移后,造成maven依赖包找不到
- git服务器搭建
- 一些Java自己弄明白的数组
- linux多进程编程