Description

原题来自:BZOJ 2142

一年一度的圣诞节快要来到了。每年的圣诞节小 E 都会收到许多礼物,当然他也会送出许多礼物。不同的人物在小 E 心目中的重要性不同,在小 E 心中分量越重的人,收到的礼物会越多。

小 E 从商店中购买了 n 件礼物,打算送给 m 个人,其中送给第 iii 个人礼物数量为 wii​​。请你帮忙计算出送礼物的方案数(两个方案被认为是不同的,当且仅当存在某个人在这两种方案中收到的礼物不同)。由于方案数可能会很大,你只需要输出模 PPP 后的结果。

Input

输入的第一行包含一个正整数 P,表示模数;

第二行包含两个正整数 nm,分别表示小 E 从商店购买的礼物数和接受礼物的人数;

以下 mmm 行每行仅包含一个正整数 wii​​,表示小 E 要送给第 iii 个人的礼物数量。

Output

若不存在可行方案,则输出 Impossible,否则输出一个整数,表示模 P 后的方案数

Sample Input

100
4 2
1
2

Sample Output

12

Sample Explaination

12 种方案详情如下: {1}{2,3},{1}{2,4},{1}{3,4},{2}{1,3},{2}{1,4},{2}{3,4},{3}{1,2},{3}{1,4},{3}{2,4},{4}{1,2},{4}{1,3},{4}{2,3}

 Hint

P=p1c1×p2c2×p3c3×⋯×ptci pi为质数1c1​​​​×p2c2​​​​×p3c3​​​​××ptct​​​​,pip_ipi​​ 为质数。

对于 100%的数据,1≤n≤109,1≤m≤5,1≤pici≤1059​​,1m5,1pici​​​​105​​。

最近一直在做CRT,乍一看还以为又是一个水题,实际上并没有那么简单。

是时候来总结一下中国剩余定理CRT,并且开启奇妙的扩展卢卡斯定理ex_lucas了。

审题,题意很简单,要求 Π(i=1->m)C(n-∑(j=1->i-1)wj,wj)%P

组合数取模,很容易想到卢卡斯定理。

然而根据题意,P并不一定是质数,普通卢卡斯定理只适用于质数。

怎么办呢?那么你觉得我所说的ex_lucas是干什么用的呢?

如果我们把P质因数分解,不就得到了质数吗?

我们只需要求出ans%piki 然后再CRT解关于它们的余数方程,就好了呀。

  简单介绍CRT:

    对于余数方程xΞai(mod pi) 其中pi彼此互质。

    设P=∏pi,则最小自然数解x=(∑P/pi*ai*si)%P;其中si表示方程(P/pi)*x+pi*y=1的解。

    证明略。而对于pi不互质的情况需要ex_CRT,十分恶心不再这里介绍了。

 1 //tim[i]即为pi,aans[i]即为a[i],prr即为P
 2 int CRT(){
 3     int ans=0,x,y;
 4     for(int i=1;i<=nom;++i){
 5         ex_gcd(prr/tim[i],tim[i],x,y);
 6         x=(x%tim[i]+tim[i])%tim[i];
 7         ans=(ans+prr/tim[i]*aans[i]%prr*x%prr)%prr;
 8     }
 9     return ans;
10 }
CRT

相关文章: