文章目录

  • ResultResultResult
  • HyperlinkHyperlinkHyperlink
  • DescriptionDescriptionDescription
  • SolutionSolutionSolution
  • CodeCodeCode

ResultResultResult


HyperlinkHyperlinkHyperlink

https://www.luogu.com.cn/problem/P2183


DescriptionDescriptionDescription

有nnn件礼物,要送给mmm个人,第iii个人要收到aia_iai​的礼物,答案对ppp取模
求方案数

数据范围:n≤109,m≤5,p,ai≤109n\leq 10^9,m\leq 5,p,a_i\leq 10^9n≤109,m≤5,p,ai​≤109


SolutionSolutionSolution

考虑到mmm很小,我们模拟礼物一件一件送的过程
我们从nnn个礼物中挑选出a1a_1a1​件送给1
从n−a1n-a_1n−a1​个礼物中挑选出a2a_2a2​件送给2
从n−a1−a2n-a_1-a_2n−a1​−a2​个礼物中挑选出a3a_3a3​件送给3
以此类推
则方案数为∏i=1mCn−∑j=1j<iaiai\prod_{i=1}^m C_{n-\sum^{j<i}_{j=1} a_i}^{a_i}∏i=1m​Cn−∑j=1j<i​ai​ai​​
由于模数不一定是质数,用扩展卢卡斯定理即可
当然你也可以用组合的思想把式子展开合并最后得到一堆阶乘相乘的形式
时间复杂度:O(m(plogpn))O(m(plog_pn))O(m(plogp​n))


CodeCodeCode

#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;LL p,n,m,sum,a[6],res,now;
inline LL read()
{char c;LL d=1,f=0;while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
inline LL ksm(LL x,LL y,LL p)
{LL res=1;for(;y;y>>=1,(x*=x)%=p) if(y&1) (res*=x)%=p;return res;
}
inline void Exgcd(LL a,LL b,LL &x,LL &y)
{if(b==0) return (void)(x=1,y=0);Exgcd(b,a%b,x,y);LL tmp=x;x=y;y=tmp-a/b*y;return;
}
inline LL INV(LL a,LL p)
{LL x,y;Exgcd(a,p,x,y);return (x+p)%p;
}
inline LL Fac(LL n,LL p,LL pk)
{if(n<2) return 1;LL prod_xh=1,prod_last=1;for(LL i=1;i<=pk;i++) if(i%p) (prod_xh*=i)%=pk;prod_xh=ksm(prod_xh,n/pk,pk);for(LL i=pk*(n/pk);i<=n;i++) if(i%p) (prod_last*=i%pk)%=pk;return Fac(n/p,p,pk)*prod_xh%pk*prod_last%pk;
}
inline LL G(LL n,LL p)
{if(n<p) return 0;return G(n/p,p)+(n/p);
}
inline LL C(LL n,LL m,LL p,LL pk){return Fac(n,p,pk)*INV(Fac(m,p,pk),pk)%pk*INV(Fac(n-m,p,pk),pk)%pk*ksm(p,G(n,p)-G(m,p)-G(n-m,p),pk)%pk;}
LL A[65],B[65],tot;
inline LL Exlucas(LL n,LL m,LL p)
{LL x=p;tot=0;for(LL i=2;i*i<=x;i++)if(x%i==0){LL tmp=1;do{x/=i;tmp*=i;}while(x%i==0);B[++tot]=C(n,m,i,tmp);A[tot]=tmp;}if(x!=1){B[++tot]=C(n,m,x,x);A[tot]=x;}LL res=0,M=p;for(register int i=1;i<=tot;i++){LL Mi=M/A[i],Mi_=INV(Mi,A[i]);(res+=B[i]*Mi%M*Mi_%M)%=M;}return res;
}
signed main()
{p=read();n=read();m=read();for(register int i=1;i<=m;i++) a[i]=read(),sum+=a[i];if(n<sum) return puts("Impossible")&0;res=1;for(register int i=1;i<=m;i++){(res*=Exlucas(n,a[i],p))%=p;n-=a[i];}printf("%lld",res);
}

P2183 [国家集训队]礼物相关推荐

  1. P2183 [国家集训队]礼物(扩展卢卡斯)

    P2183 [国家集训队]礼物 题意: 有n个礼物,分给m个人,分给第i个人的礼物数量是wi,问送礼物的方案数. 题解: 扩展卢卡斯模板题 很容易看出和组合数有关的题目,对于总方案,完美可以将其分解为 ...

  2. P2183 [国家集训队]【一本通提高组合数学】礼物

    [国家集训队]礼物 题目背景 一年一度的圣诞节快要来到了.每年的圣诞节小 E 都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小 E 心目中的重要性不同,在小 E 心中分量越重的人,收到的礼物会 ...

  3. Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)

    P2619 [国家集训队2]Tree I 题意 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生成树. 题目保证有解. 输入输出格式 输入格式 ...

  4. BZOJ 2156 「国家集训队」星际探索(最短路)【BZOJ计划】

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

  5. BZOJ 2154 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演,经典好题)(Luogu P1829)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P1829 [国家集训队]Crash的数字表格 / JZPTAB(反演,经典好题) Problem S ...

  6. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 9894  Solved: 4561 [Su ...

  7. 数据结构(莫队算法):国家集训队2010 小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到 ...

  8. Luogu4451 [国家集训队]整数的lqp拆分

    题目链接:洛谷 题目大意:求对于所有$n$的拆分$a_i$,使得$\sum_{i=1}^ma_i=n$,$\prod_{i=1}^mf_{a_i}$之和.其中$f_i$为斐波那契数列的第$i$项. 数 ...

  9. 中国最新奥数竞赛成绩出炉:南师大附中女生严彬玮满分夺冠!60人国家集训队名单公布...

    雷刚 发自 副中心  量子位 报道 | 公众号 QbitAI 第35届中国数学奥林匹克竞赛成绩公布. 同时也意味着新一届中国奥数国家集训队,正式集结. 60名中学生. 湖北贡献9人.广东7人,上海6人 ...

  10. 【BZOJ2117】 [2010国家集训队]Crash的旅游计划

    [BZOJ2117] [2010国家集训队]Crash的旅游计划 Description 眼看着假期就要到了,Crash由于长期切题而感到无聊了,因此他决定利用这个假期和好友陶陶一起出去旅游. Cra ...

最新文章

  1. java js 截取字符串,js截取字符串的三种方法
  2. mysql和tdengine_TDengine 基本操作
  3. 数据库水平切分的实现原理解析
  4. [转载] 在java中,如何将方法作为参数传递
  5. Tips:PowerDesigner16.5 图表显示Code以及 Columns新增Commet显示
  6. 老毛桃PE工具安装32位win7系统ISO镜
  7. 蓝桥杯【学做菜】Java
  8. 冷笑话,笑不笑随你,哈哈!
  9. 【整理+总结】pink老师前端三件套之HTML笔记(二)HTML标签
  10. 对于洛谷提高试炼场-动态规划篇的爆破
  11. 安装mathpix注册不了账户:unexcepted error
  12. matlab抗混叠滤波器,音频抗混叠滤波器设计
  13. Django Xadmin 官方文档 之五 Xadmin 插件制作
  14. STM32MP157驱动开发——Linux 音频驱动
  15. iOS 引导图的聚光灯效果代码实现
  16. 欧盟委员会开源计划办公室启动漏洞赏金
  17. 3d图像重构matlab,matlab图像的三维重建
  18. 红橙Darren视频笔记 换肤框架4 换肤的功能完善 内存泄漏分析
  19. JamesBin专属嵌入式博客导航
  20. 电信笔试C语言,-中国电信笔试-中国电信C网应知应会题库基础分册(V1.0).doc

热门文章

  1. windows管理信息服务器不可用,Windows提示 错误: RPC 服务器不可用 解决方法。
  2. java 以10为底的对数_获取Java中值的以10为底的对数
  3. microsoftedge无限弹出_Win10升级之后edge浏览器总是弹出欢迎页面解决方法
  4. java中文getbytes为3_Java getBytes方法详解(字符集问题)
  5. hp台式计算机怎么进bois,HP笔记本怎么进BIOS?惠普电脑进入BIOS方法
  6. nas 和 远程文件夹同步_我应该如何使用Qsync来同步我计算机和NAS上的档案?
  7. 文件怎么复制到虚拟机中的linux系统吗,Windows下的文件如何复制到虚拟机的Linux中...
  8. cityscape 数据集 mmsegmentation训练记录
  9. 计算机vb输入框函数,VB基本函数大全
  10. 微信小程序报错40163-“errmsg“解决方案