题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2142

没给P的范围,但说 pi ^ ci<=1e5,一看就是扩展lucas。

学习材料:https://blog.csdn.net/clove_unique/article/details/54571216

     https://www.cnblogs.com/elpsycongroo/p/7620197.html

于是打(抄)了第一份exlucas的板子。那个把 pi的倍数 和 其余部分 分开处理的写法非常清楚!自己本来还想弄个pair的函数什么的。

num的范围?

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int N=;
int num,m[N],pk[N];
ll mod,w[],a[N],x,y,ans,n,l;
void init(ll n)
{
for(ll i=;i*i<=n;i++)
if(n%i==)
{
m[++num]=i;pk[num]=;
while(n%i==)n/=i,pk[num]*=i;
}
if(n>)m[++num]=n,pk[num]=n;
}
ll pw(ll x,ll k,int mod)
{
ll ret=;x%=mod;while(k){if(k&)(ret*=x)%=mod;(x*=x)%=mod;k>>=;}return ret;
}
ll multi(ll n,int pi,int pk)
{
if(!n)return ;//
ll sum=;
for(int i=;i<pk;i++)if(i%pi)(sum*=i)%=pk;
sum=pw(sum,n/pk,pk);
for(int i=;i<=n%pk;i++)if(i%pi)(sum*=i)%=pk;
return sum*multi(n/pi,pi,pk)%pk;//n/pi!!
}
void exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b){x=;y=;return;}
exgcd(b,a%b,y,x);y-=a/b*x;
}
ll inv(ll n,ll mod){exgcd(n,mod,x,y);return (x+mod)%mod;}
ll exlucas(ll n,ll m,int pi,int pk)
{
if(n<m)return ;//
ll a=multi(n,pi,pk),b=multi(m,pi,pk),c=multi(n-m,pi,pk);
ll k=;
for(ll i=n;i;i/=pi)k+=i/pi;//阶乘的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,pk)%pk*inv(c,pk)%pk*pw(pi,k,pk)%pk;
}
ll crt()
{
ll M=,ret=;for(int i=;i<=num;i++)M*=pk[i];//pk,not m(pi)
for(int i=;i<=num;i++)
{
ll w=M/pk[i];
(ret+=w*inv(w,pk[i])*a[i])%=mod;
}
return (ret+mod)%mod;
}
ll excomb(ll n,ll k)
{
for(int i=;i<=num;i++)
a[i]=exlucas(n,k,m[i],pk[i]);
return crt();
}
int main()
{
scanf("%lld%lld%lld",&mod,&n,&l);ll tmp=;
init(mod);
for(int i=;i<=l;i++)scanf("%lld",&w[i]),tmp+=w[i];
if(n<tmp){printf("Impossible");return ;}
ans=;
for(int i=;i<=l;i++)
{
tmp=excomb(n,w[i]);
(ans*=tmp)%=mod;n-=w[i];
}
printf("%lld\n",ans);
return ;
}

bzoj 2142 礼物——扩展lucas模板的更多相关文章

  1. BZOJ - 2142 礼物 (扩展Lucas定理)

    扩展Lucas定理模板题(貌似这玩意也只能出模板题了吧~~本菜鸡见识鄙薄,有待指正) 原理: https://blog.csdn.net/hqddm1253679098/article/details ...

  2. BZOJ.2142.礼物(扩展Lucas)

    题目链接 答案就是C(n,m1) * C(n-m1,m2) * C(n-m1-m2,m3)...(mod p) 使用扩展Lucas求解. 一个很简单的优化就是把pi,pi^ki次方存下来,因为每次分解 ...

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

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

  4. 【刷题】BZOJ 2142 礼物

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

  5. [BZOJ2142]礼物(扩展Lucas)

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

  6. BZOJ 2142 礼物 组合数学 CRT 中国剩余定理

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

  7. [bzoj2142]礼物(扩展lucas定理+中国剩余定理)

    题意:n件礼物,送给m个人,每人的礼物数确定,求方案数. 解题关键:由于模数不是质数,所以由唯一分解定理, $\bmod  = p_1^{{k_1}}p_2^{{k_2}}......p_s^{{k_ ...

  8. GYM100633J. Ceizenpok’s formula 扩展lucas模板

    J. Ceizenpok’s formula time limit per test 2.0 s memory limit per test 256 MB input standard input o ...

  9. BZOJ2142 礼物 扩展lucas 快速幂 数论

    原文链接http://www.cnblogs.com/zhouzhendong/p/8110015.html 题目传送门 - BZOJ2142 题意概括 小E购买了n件礼物,送给m个人,送给第i个人礼 ...

随机推荐

  1. 优美的英文诗歌Beautiful English Poetry

    <When you are old>——<当你老了> --- William Butler Yeats ——威廉·巴特勒·叶芝When you are old and grey ...

  2. python爬虫之urllib库

    请求库 urllib urllib主要分为几个部分 urllib.request 发送请求urllib.error 处理请求过程中出现的异常urllib.parse 处理urlurllib.robot ...

  3. poj 2828 Buy Tickets 【买票插队找位置 输出最后的位置序列+线段树】

    题目地址:http://poj.org/problem?id=2828 Sample Input 4 0 77 1 51 1 33 2 69 4 0 20523 1 19243 1 3890 0 31 ...

  4. 吴恩达深度学习笔记(七) —— Batch Normalization

    主要内容: 一.Batch Norm简介 二.归一化网络的激活函数 三.Batch Norm拟合进神经网络 四.测试时的Batch Norm 一.Batch Norm简介 1.在机器学习中,我们一般会 ...

  5. redis中文文档

    phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...

  6. Mysql 导出导入

    MySQL数据库导出 以root登录vps,执行以下命令导出. 1./usr/local/mysql/bin/mysqldump -u root -p123456 zhumaohai > /ho ...

  7. 16个tomcat面试题

    1)解释什么是Jasper? Jasper是Tomcat的JSP引擎 它解析JSP文件,将它们编译成JAVA代码作为servlet 在运行时,Jasper允许自动检测JSP文件的更改并重新编译它们 2 ...

  8. HDFS数据完整性

    数据完整性 Hadoop用户肯定都希望系统在存储和处理数据时不会丢失或损坏任何数据.尽管磁盘或网络上的每个I/O操作不太可能将错误引入自己正在读/写的数据中,但是如果系统中需要处理的数据量大到Hado ...

  9. Qt 安装事件过滤器installEventFilter

    Qt 安装事件过滤器installEventFilter (2013-01-28 14:29:18) 转载▼   分类: 工作笔记 Qt的事件模型一个强大的功能是一个QObject对象能够监视发送其他 ...

  10. hdoj1002--A + B Problem II

    Problem Description I have a very simple problem for you. Given two integers A and B, your job is to ...