UPC--扑克牌

简介: 题目描述从一副含有n(n≤10000)张的扑克牌[显然每张扑克牌都不相同]中,分给m(m≤100)个人,第i个人得到ai (0≤ai≤100)张牌,求一共有几种分法,这个数可能非常大,请输出此数模10007后的结果。

题目描述


从一副含有n(n≤10000)张的扑克牌[显然每张扑克牌都不相同]中,分给m(m≤100)个人,第i个人得到ai (0≤ai≤100)张牌,求一共有几种分法,这个数可能非常大,请输出此数模10007后的结果。


输入


第一行两个整数 为 n m

第二行 m个整数 ai


输出


一个整数,表示有多少种分法


样例输入


【样例1】
5 2
3 1
【样例2】
20 19
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1


样例输出


【样例1】
20
【样例2】
8707


思路:很明显的组合数学的经典问题,可以用杨辉三角打表来处理,然后做乘法取余就完事比如第一个样例就是C(5,3)*C(2,1);

利用for循环来解决问题


#pragma GCC optimize (2)
#pragma G++ optimize (2)
#include <bits/stdc++.h>
#include <algorithm>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
using namespace std;
#define wuyt main
typedef long long ll;
#define HEAP(...) priority_queue<__VA_ARGS__ >
#define heap(...) priority_queue<__VA_ARGS__,vector<__VA_ARGS__ >,greater<__VA_ARGS__ > >
template<class T> inline T min(T &x,const T &y){return x>y?y:x;}
template<class T> inline T max(T &x,const T &y){return x<y?y:x;}
//#define getchar()(p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
//char buf[(1 << 21) + 1], *p1 = buf, *p2 = buf;
ll read(){ll c = getchar(),Nig = 1,x = 0;while(!isdigit(c) && c!='-')c = getchar();
if(c == '-')Nig = -1,c = getchar();
while(isdigit(c))x = ((x<<1) + (x<<3)) + (c^'0'),c = getchar();
return Nig*x;}
#define read read()
const ll inf = 1e15;
const int maxn = 2e5 + 7;
const int mod = 1e9 + 7;
#define start int wuyt()
#define end return 0
ll num[10008][108]={1};
///
void yanghui()
{
    num[0][0]=1;
    for(int i=1;i<=10000;i++){
        for(int j=0;j<=100;j++){
            num[i][j]=(num[i-1][j]+num[i-1][j-1])%10007;
        }
    }
}
ll n,m,all=1;
start{
    n=read,m=read;
    yanghui();
    ///cout<<num[3][2]<<endl;
    for(int i=1;i<=m;i++){
        int temp;
        scanf("%d",&temp);
        all=(all*num[n][temp])%10007;
        n-=temp;
    }
    cout<<all;
    end;
}
目录
相关文章
PTA 1084 外观数列 (20 分)
外观数列是指具有以下特点的整数序列
53 0
|
人工智能
UPC——Heartlessly 的魔法石(排序)
UPC——Heartlessly 的魔法石(排序)
71 0
UPC-篮球运动(线性DP)
UPC-篮球运动(线性DP)
61 0
UPC-篮球运动(线性DP)
|
机器学习/深度学习 存储 人工智能
UPC 小澳的葫芦 (最短路+01分数规划 )
UPC 小澳的葫芦 (最短路+01分数规划 )
81 0
|
人工智能
Codeforces1343D - Constant Palindrome Sum + UPC-鸭子游戏 (差分)
Codeforces1343D - Constant Palindrome Sum + UPC-鸭子游戏 (差分)
75 1
UPC 朋友 + AtCoder ABC155 C Poll (map遍历 && 二维map)
UPC 朋友 + AtCoder ABC155 C Poll (map遍历 && 二维map)
61 0
UPC-喜爱(打表+二分)
UPC-喜爱(打表+二分)
61 0
UPC-喜爱(打表+二分)
|
人工智能
UPC-放牛奶的冰箱(二分)
UPC-放牛奶的冰箱(二分)
74 0
UPC-放牛奶的冰箱(二分)
|
人工智能 BI
UPC-排课表+玉米田(容斥原理+组合数学公式)
UPC-排课表+玉米田(容斥原理+组合数学公式)
76 0
UPC-排课表+玉米田(容斥原理+组合数学公式)
UPC山头狙击战--二分
题目描述 Lucky为了掩护大部队,单枪匹马同敌人周旋,后来被敌人包围在某山头……等等,为什么怎么听怎么像狼牙山五壮士!不过不用着急,这次Lucky携带了足够的弹药,完全可以将涌上来的敌人一个一个干掉。Lucky是个神枪手,只要他的枪膛中有子弹,他就能将在他射程m(用从敌人位置到山头的直线距离算)以内的一个敌人瞬间射杀。但如果在射程内没有敌人,出于节约子弹考虑和面子问题,Lucky会等待敌人靠近然后射击。
93 0