正解:容斥+$Lucas$+组合数学

解题报告:

传送门!

和上一篇题解的题差不多,,,双倍经验趴大概算

还是说下还是有点儿区别的来着$QwQ$

两个小差别分别港下$QwQ$

首先有$m-n$件是无穷个的,,,$so$在ans的求值的时候本来是$\binom{n-1}{n+s-1}$来着,显然就要变成$\binom{m-1}{m+s-1}$

啊对了说下,因为这题代码我是直接由上题的代码魔改来的,,,$so$命名和题目不太一样,,,我这儿的按读入顺序排是,$m,n,s,mod$

然后还一个是说只用选不超过$s$件,这个可以理解为另外添了一个物品,有无数个,这样就可以当做是$s$件来做辣,少的就当全用这个新增的填上了就欧克了

还有一个小细节,,,因为和解法没什么关系只是优化复杂度的,,,就这题里的mod范围是<=1e5,$so$可以预处理一下组合数,否则就会获得$TLE$的好成绩,,,(为什么上一题不用预处理呢,一个是上一题的mod是1e9开不下,另一个是上一题是和$n$有关,$n$的范围在20以内就很欧克$QwQ$,这题里是和$m$有关就不太欧克了$QAQ$

$over!$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define t(i) edge[i].to
#define int long long
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define e(i,x) for(ri i=head[x];i;i=edge[i].nxt) const int N=+,M=1e5+;
int tot,poww[N]={},m,n,s,mod,f[N],as,jc[M],inv[M]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il int power(ri x,ri y){ri ret=;while(y){if(y&)ret=1ll*ret*x%mod;x=1ll*x*x%mod;y>>=;}return ret;}
il void pre(ri x)
{
jc[]=;rp(i,,x)jc[i]=1ll*jc[i-]*i%mod;
inv[x]=power(jc[x],mod-);my(i,x-,)inv[i]=1ll*inv[i+]*(i+)%mod;
}
il int C(ri x,ri y){if(x< || y< || x<y)return ;return 1ll*jc[x]*inv[y]%mod*inv[x-y]%mod;}
int lucas(ri x,ri y){if(!x && !y)return ;return 1ll*C(x%mod,y%mod)*lucas(x/mod,y/mod)%mod;}
il void cal(ri zt)
{
ri del=,cnt=s;
rp(i,,n-)if(zt&(poww[i])){del=-del,cnt-=f[i+]+;if(cnt<)return;}
as=(as+1ll*lucas(cnt+m-,m-)*del%mod+mod)%mod;
} signed main()
{
// freopen("4640.in","r",stdin);freopen("4640.out","w",stdout);
m=read()+;n=read();s=read();mod=read();rp(i,,n)poww[i]=poww[i-]<<,f[i]=read();pre(mod-);
rp(i,,poww[n]-)cal(i);printf("%lld\n",as);
return ;
}

这儿是代码鸭!

洛谷P4640 王之财宝 [BJWC2008] 数论的更多相关文章

  1. E 洛谷 P3598 Koishi Loves Number Theory[数论]

    题目描述 Koishi十分喜欢数论. 她的朋友Flandre为了检测她和数论是不是真爱,给了她一个问题. 已知 给定和个数,求对取模. 按照套路,呆萌的Koishi当然假装不会做了,于是她来向你请教这 ...

  2. 洛谷P3158 放棋子 [CQOI2011] dp+数论

    正解:dp+数论 解题报告: 传送门! 考虑对每种颜色的棋子单独考虑鸭,那显然有,当某一行或某一列已经被占据的时候,那一行/一列就不能再放别的颜色的棋子了,相当于直接把那一行/一列直接消了 显然就能考 ...

  3. 洛谷P4495 奇怪的背包 [HAOI2018] 数论

    正解:数论+dp 解题报告: 传送门! 首先看到这题,跳无数次,自然而然可以想到之前考过好几次了的一个结论——如果只考虑无限放置i,它可以且仅可以跳到gcd(p,v[i]) 举一反三一下,如果有多个i ...

  4. 洛谷P2303 [SDOi2012] Longge的问题 数论

    看懂了题解,太妙了TT但是想解释的话可能要很多数学公式打起来太麻烦了TT所以我就先只放代码具体推演的过程我先写在纸上然后拍下来做成图片放上来算辣quq 好的那我先滚去做题了做完这题就把题解放上来.因为 ...

  5. 洛谷$P5366\ [SNOI2017]$遗失的答案 数论+$dp$

    正解:数论$dp$ 解题报告: 传送门$QwQ$ 考虑先质因数分解.所以$G$就相当于所有系数取$min$,$L$就相当于所有系数取$max$ 这时候考虑,因为数据范围是$1e8$,$1e8$内最多有 ...

  6. 洛谷P3455 ZAP-Queries [POI2007] 莫比乌斯反演+数论分块

    正解:莫比乌斯反演 解题报告: 传送门! 首先这题刚看到就很,莫比乌斯反演嘛,和我前面写了题解的那个一模一样的,所以这儿就不讲这前边的做法辣QAQ 但是这样儿还有个问题,就现在已知我每次都是要O(n) ...

  7. 洛谷 P2261 [CQOI2007]余数求和 ||整除(数论)分块

    参考:题解 令f(i)=k%i,[p]表示不大于p的最大整数f(i)=k%i=k-[k/i]*i令q=[k/i]f(i)=k-qi如果k/(i+1)=k/i=qf(i+1)=k-q(i+1)=k-qi ...

  8. 洛谷P1372 又是毕业季I【数论】

    题目:https://www.luogu.org/problemnew/show/P1372 题意: 在1~n之中找k个数,使得他们的最大公因数最大. 思路: 假设ans是答案,说明选择的k个数分别是 ...

  9. 【数论】卢卡斯定理模板 洛谷P3807

    [数论]卢卡斯定理模板 洛谷P3807 >>>>题目 [题目] https://www.luogu.org/problemnew/show/P3807 [输入格式] 第一行一个 ...

随机推荐

  1. OpenCV使用中的一些总结

    一.threshold阈值操作 1.阈值可以被视作最简单的图像分割方法.例如,从一副图像中利用阈值分割出我们需要的物体部分,这样的图像分割方法基于图像中的物体与背景之间的灰度差异. 2.thresho ...

  2. Python爬虫基础之Urllib

    一.随时随地爬取一个网页下来 怎么爬取网页?对网站开发了解的都知道,浏览器访问Url向服务器发送请求,服务器响应浏览器请求并返回一堆HTML信息,其中包括html标签,css样式,js脚本等.Chro ...

  3. 【原创】大数据基础之Parquet(1)简介

    http://parquet.apache.org 层次结构: file -> row groups -> column chunks -> pages(data/index/dic ...

  4. Hadoop cloudera版和Apache(原生态)的区别

    ---------------------------------------------------------------------------------------------------- ...

  5. JavaScript入门学习笔记(异常处理)

    try:语句测试代码块的错误,当try中的代码块出错时执行catch中的代码块. catch:语句处理错误: throw:语句创建或抛出自定义异常. 三者一起使用可以控制程序流并生成自定义异常信息. ...

  6. 十三.iptabled配置

    期中集群架构-第十三章-iptables防火墙网路安全实践配置========================================= 01:iptables防火墙网路安全前言介绍 学好ip ...

  7. hdu5592 倒序求排列+权值线段树

    这种题为什么要用到主席树啊..8说了,直接上代码 /* 1-n的排列,给定所有前缀的逆序对数量,要求恢复排列 首先能确定最后一个数是什么,然后倒序确定即可 开线段树找空位:如果Ai-Ai-1=k,说明 ...

  8. 关于saltstack

    配置Saltstack master 服务器 master服务器:saltstack.master  172.18.1.103 minion客户端:minion01              172. ...

  9. Angular路由——在路由时候传递数据

    有3种方式 1.在查询参数中传递数据 2.在路由路径中传递数据 定义路由路径时就要指定参数名字,在实际路径中携带参数. 3.在路由配置中传递数据 一.在查询参数中传递数据 第一步:修改模版中商品详情链 ...

  10. 根据token分割字串

    #include <iostream> #include <string> #include <cstring> int main() { const char * ...