先求出式子$P_{C_{K+m-1}^{m}}^{n}$,然后对于排列直接$O(n)$求解,对于组合用扩展Lucas求解。

但这题数据并没有保证任何一个模数的质因子的$p^k$在可线性处理的范围内,于是并不会标准解法,只会面向数据编程。

数据中保证了如果某个质因子p的次数不为1,则它的$p^k$一定在可线性处理的范围内,于是只要特判次数为1的质数即可。

次数为1就可以直接求逆元$O(m)$处理了,于是问题解决,虽然随便出组数据就能卡掉。

 #include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (ll i=(l); i<=(r); i++)
typedef long long ll;
using namespace std; const int N=;
ll n,m,K,P,tot,num[N],pi[N],pk[N],sm[N]; ll ksm(ll a,ll b,ll p){
ll res=;
for (; b; a=a*a%p,b>>=)
if (b & ) res=res*a%p;
return res;
} void exgcd(ll a,ll b,ll &x,ll &y){
if (!b){ x=; y=; return; }
else exgcd(b,a%b,y,x),y-=a/b*x;
} ll inv(ll a,ll p){ ll x,y; exgcd(a,p,x,y); return (x%p+p)%p; } ll F(ll n,ll pi,ll pk){ return n ? ksm(sm[pk],n/pk,pk)*sm[n%pk]%pk*F(n/pi,pi,pk)%pk : ; } ll exLucas(ll n,ll m,ll pi,ll pk){
if (n<m) return ;
sm[]=sm[]=; rep(i,,pk) sm[i]=sm[i-]*((i%pi)?i:)%pk;
ll a=F(n,pi,pk),b=F(m,pi,pk),c=F(n-m,pi,pk),k=;
for (ll i=n; i; i/=pi) k+=i/pi;
for (ll i=m; i; i/=pi) k-=i/pi;
for (ll i=n-m; i; i/=pi) k-=i/pi;
return a*inv(b*c%pk,pk)%pk*ksm(pi,k,pk)%pk;
} ll CRT(ll r[],ll m[]){
ll res=;
rep(i,,tot) res=(res+P/m[i]*inv(P/m[i],m[i])%P*r[i])%P;
return res;
} void Frac(ll n){
tot=;
for (ll i=; i*i<=n; i++) if (n%i==){
pi[++tot]=i; pk[tot]=i; n/=i;
while (n%i==) n/=i,pk[tot]=pk[tot]*i;
}
if (n>) pi[++tot]=n,pk[tot]=n;
} ll Pe(ll n,ll m,ll P){ ll res=; rep(i,,m) res=res*(n-i+P+)%P; return res; } int main(){
scanf("%lld%lld%lld%lld",&n,&m,&K,&P);
Frac(P); ll res=;
rep(i,,tot){
ll s=;
if (pi[i]==pk[i] && pi[i]>m)
rep(j,,m) s=s*(K+m-j)%pi[i]*ksm(j,pi[i]-,pi[i])%pi[i];
else s=exLucas(K+m-,m,pi[i],pk[i]);
s=Pe(s,n,pi[i]); res=(res+P/pi[i]*inv(P/pi[i],pi[i])%P*s)%P;
}
printf("%lld\n",res);
return ;
}

[BZOJ4338][BJOI2015]糖果(扩展Lucas)的更多相关文章

  1. bzoj 4338: BJOI2015 糖果

    4338: BJOI2015 糖果 Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: 200  Solved: 93[Submit][Status][Dis ...

  2. bzoj 4830: [Hnoi2017]抛硬币 [范德蒙德卷积 扩展lucas]

    4830: [Hnoi2017]抛硬币 题意:A投a次硬币,B投b次硬币,a比b正面朝上次数多的方案数,模\(10^k\). \(b \le a \le b+10000 \le 10^{15}, k ...

  3. 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)

    J. Ceizenpok’s formula time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  4. BZOJ_2142_礼物_扩展lucas+组合数取模+CRT

    BZOJ_2142_礼物_扩展lucas+组合数取模 Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E 心目中的重要性不同 ...

  5. 扩展CRT +扩展LUCAS

    再次感谢zyf2000超强的讲解. 扩展CRT其实就是爆推式子,然后一路合并,只是最后一个式子上我有点小疑惑,但整体还算好理解. #include<iostream> #include&l ...

  6. BZOJ3129 SDOI2013方程(容斥原理+扩展lucas)

    没有限制的话算一个组合数就好了.对于不小于某个数的限制可以直接减掉,而不大于某个数的限制很容易想到容斥,枚举哪些超过限制即可. 一般情况下n.m.p都是1e9级别的组合数没办法算.不过可以发现模数已经 ...

  7. Codeforces.100633J.Ceizenpok's formula(扩展Lucas)

    题目链接 ->扩展Lucas //求C_n^k%m #include <cstdio> typedef long long LL; LL FP(LL x,LL k,LL p) { L ...

  8. P2467 [SDOI2010]地精部落 (dp+组合数)【扩展Lucas好难不会】

    题目链接:传送门 题目: 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个独一无二的高度Hi,其 ...

  9. 【learning】 扩展lucas定理

    首先说下啥是lucas定理: $\binom n m \equiv \binom {n\%P} {m\%P} \times \binom{n/P}{m/P} \pmod P$ 借助这个定理,求$\bi ...

随机推荐

  1. [csp-201709-3]JSON查询-编译原理

    声明:这个代码几乎完全就是照抄hyh学长的!!! 有什么问题我会删掉这篇的emm 当初面试的时候我的方向就是编译原理...然后学长发了个1400+的代码实现一个简化的c编译器...没看懂qaq 感觉很 ...

  2. 【BZOJ】4596: [Shoi2016]黑暗前的幻想乡

    [题意]给定n个点的无向完全图,有n-1个公司各自分管一部分路,要求所有公司都有修路的生成树数.n<=17. [算法]容斥原理+生成树计数(矩阵树定理) [题解]每个生成树方案是一个公司有无修路 ...

  3. 【译】Attacking XML with XML External Entity Injection (XXE)

    原文链接:Attacking XML with XML External Entity Injection (XXE) XXE:使用XML外部实体注入攻击XML 在XML中,有一种注入外部文件的方式. ...

  4. SMB MS17-010 利用(CVE-2017-0144 )

    exploit-db : https://www.exploit-db.com/exploits/42315/ 该漏洞的影响版本很广泛:Microsoft Windows Windows 7/8.1/ ...

  5. Vue笔记之模板语法

    插值 比较常用的就是插值,插值就是{{ foobar }}用两个大括号包起来的一个变量,显示的时候会将双大括号标签替换为这个变量的值. 基本的用法就是: <p>{{ message }}& ...

  6. Markdown tutorial [repost]

    1. italic We'll start by learning two basic elements in text formatting: italics and bold. In these ...

  7. Linux 脚本内容指定用户执行

    #!/bin/bash set -x ## 因为这些变量在下面要用,所以要写在最上面, ## 如果直接写在下面,则变量获取不到,并且下面的 $ 标识的都要用 引号引起来,否则这些参数接收不到 tarf ...

  8. 关于[神州数码信息安全DCN杯/信息安全管理与评估]的一些经验之谈

    前阵子参加了神州数码的比赛,赛后有如下经验分享,给还没参加过的朋友分享一下心德以及要注意的坑. 先科普一下这个比赛的三个阶段: 第一阶段主要是考网络部分的,例如搭建wifi以及防火墙诸如此类的设备. ...

  9. Machine Learning系列--TF-IDF模型的概率解释

    信息检索概述 信息检索是当前应用十分广泛的一种技术,论文检索.搜索引擎都属于信息检索的范畴.通常,人们把信息检索问题抽象为:在文档集合D上,对于由关键词w[1] ... w[k]组成的查询串q,返回一 ...

  10. 设计模式之笔记--解释器模式(Interpreter)

    解释器模式(Interpreter) 定义 解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 类图 描述 Expr ...