[国家集训队]礼物(扩展Lucas定理)

传送门可以直接戳标题

172.40.23.20 24 .1

答案就是一个式子:

\[{n\choose \Sigma_{i=1}^m w}\times\prod_{i=1}^m {\Sigma_{j=1}^m w_j-\Sigma_{j=1}^{j< i}w_j\choose w_i}
\]

解释一下这个式子怎么来的...

  • 先从所有的礼物里面选出\(\Sigma w\)出来
  • 每个人依次选,选择的方案就是从剩下的礼物中挑出\(w_i\)个

直接扩展Lucas...

#include<bits/stdc++.h>
#define int long long
using namespace std;typedef long long ll;
template < class ccf >
inline ccf qr(ccf b){
register char c=getchar();register int q=1;register ccf x=0;
while(c<48||c>57)q=c==45?-1:q,c=getchar();
while(c>=48&&c<=57)x=x*10+c-48,c=getchar();
return q==-1?-x:x;}
inline int qr(){return qr(1);} const int maxn=51;
int n,mod,m;
int w[maxn]; namespace lcs{
inline ll poww(ll a,ll b,ll mod){
ll base=a,ans=1;
while(b){
if(b&1) ans=(1ll*ans*base)%mod;
base=(1ll*base*base)%mod;
b>>=1;
}
return 1ll*ans;
} inline void Exgcd(ll a,ll b,ll &x,ll &y){
if(!b){x=1,y=0;return ;}
Exgcd(b,a%b,y,x);y-=a/b*x;
} inline ll rev(ll k,ll p){
if(!k)return 0;
ll x=0,y=0,a=k,b=p;
Exgcd(a,b,x,y);
x=(x%b+b)%b;
if(!x)x+=b;
return 1ll*x;
}
inline ll mul(ll n,ll p,ll pk){
if(!n)return 1;
ll ans=1;
for(ll i=2;i<=pk;i++)
if(i%p)ans=ans*i%pk;
ans=poww(ans,n/pk,pk);
for(ll i=2;i<=n%pk;i++)
if(i%p)ans=ans*i%pk;
return 1ll*ans*mul(n/p,p,pk)%pk;
} inline ll C(ll n,ll m,ll mod,ll p,ll pk){
if(m>n)return 0;
ll a=mul(n,p,pk),b=mul(m,p,pk),c=mul(n-m,p,pk),k=0; for(ll i=n;i;i/=p)k+=i/p;
for(ll i=m;i;i/=p)k-=i/p;
for(ll i=n-m;i;i/=p)k-=i/p; ll ans=1ll*a*rev(b,pk)%pk*rev(c,pk)%pk*poww(p,k,pk)%pk; return 1ll*ans*(mod/pk)%mod*rev(mod/pk,pk)%mod;
}
inline ll exlucas(int n,int m){
int mod=::mod;
int ret=0;
for(register int t=2;t*t<=mod;++t)
if(mod%t==0){
register int temp=1;
while(mod%t==0) temp*=t,mod/=t;
ret=(ret+C(n,m,::mod,t,temp))%(::mod);
}
if(mod>1) ret=(ret+C(n,m,::mod,mod,mod))%(::mod);
return ret;
} } using lcs::exlucas;
#undef int
int main(){
#define int long long
// freopen("gift.in","r",stdin);
// freopen("gift.out","w",stdout);
mod=qr();
n=qr();m=qr();
for(register int t=1;t<=m;++t)
w[t]=qr(),w[0]+=w[t];
if(w[0]>n) return puts("Impossible"),0;
ll ans=exlucas(n,w[0]);
for(register int t=1;t<=m;++t)
ans=ans*exlucas(w[0],w[t])%mod,w[0]-=w[t];
printf("%lld\n",(ll)ans);
return 0;
}

【题解】国家集训队礼物(Lucas定理)的更多相关文章

  1. 【LG2183】[国家集训队]礼物

    [LG2183][国家集训队]礼物 题面 洛谷 题解 插曲:不知道为什么,一看到这个题目,我就想到了这个人... 如果不是有\(exLucas\),这题就是\(sb\)题... 首先,若\(\sum_ ...

  2. 题解-[国家集训队]Crash的数字表格 / JZPTAB

    题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...

  3. BZOJ 2142: 礼物 [Lucas定理]

    2142: 礼物 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1294  Solved: 534[Submit][Status][Discuss] ...

  4. luogu P2183 [国家集训队]礼物

    LINK:礼物 n个物品 m个人 每个人要分得wi 个物品 每个物品互异 分给每个人的物品不分顺序 求方案数. \(n,p\leq 1e9 m\leq 5\) 方案数 那显然是 第一个人拿了w1件物品 ...

  5. 洛谷 P2183 [国家集训队]礼物

    题目描述 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多.小E从商店中购买了n件礼物 ...

  6. Luogu P2183 [国家集训队]礼物 扩展卢卡斯+组合数

    好吧学长说是板子...学了之后才发现就是板子qwq 题意:求$ C_n^{w_1}*C_{n-w_1}^{w_2}*C_{n-w_1-w_2}^{w_3}*...\space mod \space P ...

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

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

  8. [学习笔记]扩展LUCAS定理

    可以先做这个题[SDOI2010]古代猪文 此算法和LUCAS定理没有半毛钱关系. [模板]扩展卢卡斯 不保证P是质数. $C_n^m=\frac{n!}{m!(n-m)!}$ 麻烦的是分母. 如果互 ...

  9. Lucas定理和扩展Lucas定理

    1.Lucas定理 首先给出式子:\(C_n^m\%p = C_{\lfloor\frac{n}{p}\rfloor}^{\lfloor\frac{m}{p}\rfloor} * C_{n\%p}^{ ...

随机推荐

  1. 2017.6.30 IDEA插件--gsonfomat的安装与使用

    参考来自:http://www.cnblogs.com/1024zy/p/6370305.html 1.安装 2.使用 (1)新建一个空类 (2)在空类里按快捷键:alt+s,打开gsonformat ...

  2. 理解支持向量机(四)LibSVM工具包的使用

    LibSVM是一款简单易用的支持向量机工具包.包括了C和Java的开发源代码.大家能够訪问其官网进行了解和下载相关文件. 这里以其官网的第一个数据集a1a 为例.练习使用多项式核和径向基核来对数据集进 ...

  3. 安装jenkins插件的两种方法

    安装jenkins插件有两种方法,一种是在线安装,一种是离线安装.两种方式介绍如下: 1.如果服务器可以上网,那边选择在线安装最好不过了,安装流程为:系统管理----插件管理---选择需要的插件直接安 ...

  4. 从头认识Spring-1.7 如何通过属性注入Bean?(1)-如何通过属性向对象注入值?

    这一章节我们来讨论一下如何通过属性注入Bean? 这一章节分为两部分,第一部分我们通过属性向对象注入值,第二部分我们通过属性向对象注入还有一个对象的引用. 1.如何通过属性向对象注入值? (1)dom ...

  5. vi 替换操作

    举例一: ,$s/// 从第一行到最后一行 147都替换为150 举例二: 例:替换当前文件中所有old为new :%s/old/new/g #%表示替换说有行,g表示替换一行中所有匹配点. 举例三: ...

  6. vue created 生命周期

    在实例创建完成后被立即调用.在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调.然而,挂载阶段还没开始,$el属性目前不可见. ...

  7. debounce 防抖动函数

    http://lodash.think2011.net/debounce _.debounce(func, [wait=0], [options]) 创建一个防抖动函数. 该函数会在 wait 毫秒后 ...

  8. ROS当中添加第三方库

      下文以serial 库为依据讲解第三方库在ROS下面的配置. 参考文献:http://blog.csdn.net/u011853479/article/details/51263590 ros中使 ...

  9. 基于SpringMVC+Ext.js的权限管理系统(无权限框架)

    代码地址如下:http://www.demodashi.com/demo/12811.html 0.准备工作 注意!!! 本案例数据库相关请下载例子包,内有数据库脚本.EXCEL数据表和详细的设计文档 ...

  10. Ctrl/Alt 快捷键

    Ctrl+S 保存   Ctrl+W 关闭程序   Ctrl+N 新建文档   Ctrl+O 打开(选择打开其他文档)   Ctrl+Z 撤销   Ctrl+F 查找   Ctrl+X 剪切   Ct ...