题目大意:

$n$件礼物,送给$m$个人,其中送给第$i$个人礼物数量为$w_i$,求送礼物的方案数

思路:

显然答案为$\binom{n}{w_1} \binom{n-w_1}{w_2} \cdots \binom{n-w_1 ... w_{m-1}}{w_m}$

化简得到$\frac{n!}{w_1 ! w_2 ! \cdots w_m! (n-sum)!}$

然后扩展卢卡斯即可

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<cmath>
 6 #include<algorithm>
 7 #include<queue>
 8 #include<vector>
 9 #include<map>
10 #include<set>
11 #define ll long long
12 #define db double
13 #define inf 2139062143
14 #define MAXN 400100
15 #define rep(i,s,t) for(register int i=(s),i##__end=(t);i<=i##__end;++i)
16 #define dwn(i,s,t) for(register int i=(s),i##__end=(t);i>=i##__end;--i)
17 #define ren for(register int i=fst[x];i;i=nxt[i])
18 #define pb(i,x) vec[i].push_back(x)
19 #define pls(a,b) ((a+b)%MOD+MOD)%MOD
20 #define mns(a,b) ((a%MOD-(b)%MOD)%MOD+MOD)%MOD
21 #define mul(a,b) (1LL*(a)*(b))%MOD
22 using namespace std;
23 inline int read()
24 {
25     int x=0,f=1;char ch=getchar();
26     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
27     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
28     return x*f;
29 }
30 int n,m,a[10],ans,MOD;
31 int exgcd(int a,int b,int &x,int &y)
32 {
33     if(!b) {x=1,y=0;return a;}
34     int d=exgcd(b,a%b,y,x);y-=(a/b)*x;return d;
35 }
36 int q_pow(int bas,int t,int p,int res=1)
37 {
38     for(;t;t>>=1,bas=(1LL*bas*bas)%p) if(t&1) res=(1LL*res*bas)%p;return res;
39 }
40 int inv(int n,int p){int x,y;exgcd(n,p,x,y);return (x+p)%p;}
41 int fac(int n,int p,int pk)
42 {
43     if(!n) return 1;int res=1;
44     rep(i,2,pk) if(i%p) res=(1LL*res*i)%pk;res=q_pow(res,n/pk,pk);
45     rep(i,2,n%pk) if(i%p) res=(1LL*res*i)%pk;return (1LL*res*fac(n/p,p,pk))%pk;
46 }
47 int work(int p,int pk)
48 {
49     int res=fac(n,p,pk),s=0;for(int i=n;i;i/=p) s+=i/p;
50     rep(i,1,m) {for(int j=a[i];j;j/=p) s-=j/p;res=mul(res,inv(fac(a[i],p,pk),pk));}
51     return mul(q_pow(p,s,pk),res);
52 }
53 void exlucas()
54 {
55     int rst=MOD,pk;rep(i,2,sqrt(MOD)) if(rst%i==0)
56     {
57         pk=1;while(rst%i==0) rst/=i,pk*=i;
58         ans=pls(mul(mul(work(i,pk),inv(MOD/pk,pk)),MOD/pk),ans);
59     }
60     if(rst!=1) ans=pls(mul(mul(work(rst,rst),inv(MOD/rst,rst)),MOD/rst),ans);
61     printf("%d\n",ans);
62 }
63 int main()
64 {
65     MOD=read();n=read(),m=read();int s=0;rep(i,1,m) a[i]=read(),s+=a[i];
66     if(s>n)puts("Impossible");else {if(n-s) a[++m]=n-s;exlucas();}
67 }

View Code

转载于:https://www.cnblogs.com/yyc-jack-0920/p/10656378.html

bzoj 2142 礼物相关推荐

  1. [BZOJ]2142 礼物 扩展Lucas

    2142: 礼物 Time Limit: 10 Sec   Memory Limit: 259 MB Submit: 1788   Solved: 748 [ Submit][ Status][ Di ...

  2. BZOJ 2142 礼物(拓展Lucas,中国剩余定理)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2142 是 hydro 的 BZOJ ...

  3. bzoj 3055礼物运送 floyed + 状压DP

    bzoj 3055: 礼物运送 floyed first 设f[i][S]表示取到了S集合中的所有点(不一定是经过的所有点),最后停在了i的最优值. 初始就f[i][{i}] = dis[1][i] ...

  4. 「BZOJ 2142」礼物

    题目链接 戳这 Title Solution 这一道题显然可以看出公式为: \[ans=C_{n}^{w_1}*C_{n-w}^{w_2}*...*C_{w_m}^{w_m}\] 然后就可以用扩展Lu ...

  5. bzoj 3055 礼物运送

    首先处理出两点之间最短路,设状态f[i][j]表示j状态下结尾为i的最短路,所以有转移f[i][j]=f[k][j|(1<<(k-1))]+dis[i][k]; 初状态就是f[i][(1& ...

  6. bzoj #4827 礼物(FFT)(HNOI2017)

    标签:FFT Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定 ...

  7. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

  8. bzoj2142 礼物

    2142: 礼物 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 848  Solved: 357 [Submit][Status][Discuss] ...

  9. [BZOJ 4827][Hnoi2017]礼物

    4827: [Hnoi2017]礼物 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 1091  Solved: 748 [Submit][Statu ...

最新文章

  1. software RAID0+cryptsetup磁盘加密
  2. Vue 项目实现按钮级别权限管理
  3. CodeForces 1616H Keep XOR Low {a^b≤x} / CodeForces gym102331 Bitwise Xor {a^b≥x}(trie树 + 计数)
  4. 本年度读书计划-看几本必须好好琢磨的书
  5. 获取浏览器高度_鸡哥解读FILECOIN浏览器之幸运值
  6. rhel7 mysql无法运行_redhat7下mysql5.7.12重启电脑后起不来问题
  7. 2013年思科万物互联IoE十大见解
  8. Mybatis_day2_Mybatis的参数深入
  9. 突破”子网隔离”***C段
  10. 编程实现英语句子按单词倒叙-C语言
  11. ORID焦点呈现法(Focused Conversation Method)
  12. java web简单线上游戏_手把手教你用Java实现一个简易联网坦克对战小游戏 !
  13. 湖北省仙桃市谷歌高清卫星地图下载
  14. KSQL:Apache Kafka的流式SQL
  15. 【机器学习】树模型遇上类别型特征(Python)
  16. MySQL表查询关键字
  17. 教程:从零开始 使用Python进行深度学习!
  18. [埋坑系列] 基于QT/C++的杰瑞走迷宫小游戏 :1.大体构造
  19. 【笔记】嵌入式系统概述
  20. 惊鸿一瞥-Windows presentation layer application 系列 (二)

热门文章

  1. 「技术人生」:什么是技术一号位?
  2. 商越加入阿里云原生合作伙伴计划,共创智慧采购新生态
  3. 和你谈谈数据分析报告
  4. 阿里云李飞飞:传统数据库步履蹒跚,未来的机会在哪里?
  5. 社交网站将推动手游发展
  6. shell脚本中的条件测试
  7. PHP生成验证码图片
  8. SQL Editor and reconnect【mysql(workbench)更新数据时候的一个异常】【Error Code:1175】
  9. mysql thread入门分析
  10. LeetCode 404. 左叶子之和(Sum of Left Leaves)