牛客挑战赛30D 小A的昆特牌(组合数学)
题面
题解
很容易写出一个暴力
\]
即枚举选了多少个步兵,然后用插板法算出方案数
我们对这个换一种角度考虑,可以看做是从\((0,0)\)走到\((s,n+m)\),且必须经过\((l,n),(r,n)\)这条直线的方案数
这个就等价于第\(l\)步向右走时纵坐标在\((0,n-1)\)的方案数减去第\(r+1\)步向右走时在\((0,n-1)\)的方案数
ps:关于第\(p\)步向右走时在\((0,n-1)\)的方案的计算的话,我们枚举一下就行了,即为
\]
其中前面是\(p-1+i\)是因为最后一步强制向右走
//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=2e7+5,P=998244353;
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int inv[N],f[N],g[N];
int n,m,s,l,r;
int calc(R int p){
if(p>s)return 0;
int res=0;
f[0]=g[0]=1;
fp(i,1,n+m){
g[i]=1ll*g[i-1]*(p+i-1)%P*inv[i]%P,
f[i]=1ll*f[i-1]*(s-p+i)%P*inv[i]%P;
}
fp(i,0,n-1)res=add(res,mul(f[n+m-i],g[i]));
return res;
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d%d%d%d%d",&n,&m,&s,&l,&r);
inv[0]=inv[1]=1;fp(i,2,N-1)inv[i]=1ll*(P-P/i)*inv[P%i]%P;
printf("%d\n",dec(calc(l),calc(r+1)));
return 0;
}
牛客挑战赛30D 小A的昆特牌(组合数学)的更多相关文章
- [牛客挑战赛 30D] 小A的昆特牌 解题报告 (组合数学)
interlinkage: https://ac.nowcoder.com/acm/contest/375/D description: solution: 我们枚举步兵的数量$x$,还剩下$S-x$ ...
- 【牛客挑战赛30D】小A的昆特牌(组合问题抽象到二维平面)
点此看题面 大致题意: 有\(S\)张无编号的牌,可以将任意张牌锻造成\(n\)种步兵或\(m\)种弩兵中的一种,求最后步兵数量大于等于\(l\)小于等于\(r\)的方案数. 暴力式子 首先我们来考虑 ...
- 牛客挑战赛30 小G砍树 树形dp
小G砍树 dfs两次, dp出每个点作为最后一个点的方案数. #include<bits/stdc++.h> #define LL long long #define fi first # ...
- 牛客挑战赛30-T3 小G砍树
link 题目大意: n个节点的带标号无根树.每次选择一个度数为1的节点并将它从树上移除.问总共有多少种不同的方式能将这棵树删到只剩 1 个点.两种方式不同当且仅当至少有一步被删除的节点不同. 题解: ...
- 牛客挑战赛 39 牛牛与序列 隔板法 容斥 dp
LINK:牛牛与序列 (牛客div1的E题怎么这么水... 还没D难. 定义一个序列合法 当且仅当存在一个位置i满足 $a_i>a_,a_j<a_$且对于所有的位置i,$1 \leq a_ ...
- 牛客挑战赛 30 A 小G数数
题目链接:https://ac.nowcoder.com/acm/contest/375/A 分析:我写的时候竟然把它当成了DP....... 还建了个结构体DP数组,保存一二位,不知道当时脑子在抽啥 ...
- 5.15 牛客挑战赛40 C 小V和字符串 数位dp 计数问题
LINK:小V和字符串 容易想到只有1个数相同的 才能有贡献. 知道两个01串 那么容易得到最小步数 大体上就是 第一个串的最前的1和第二个串最前的1进行匹配. 容易想到设f[i][j]表示 前i位1 ...
- 5.15 牛客挑战赛40 E 小V和gcd树 树链剖分 主席树 树状数组 根号分治
LINK:小V和gcd树 时限是8s 所以当时好多nq的暴力都能跑过. 考虑每次询问暴力 跳父亲 这样是nq的 4e8左右 随便过. 不过每次跳到某个点的时候需要得到边权 如果直接暴力gcd的话 nq ...
- 5.15 牛客挑战赛40 B 小V的序列 关于随机均摊分析 二进制
LINK:小V的序列 考试的时候 没想到正解 于是自闭. 题意很简单 就是 给出一个序列a 每次询问一个x 问序列中是否存在y 使得x^y的二进制位位1的个数<=3. 容易想到 暴力枚举. 第一 ...
随机推荐
- ie8、9 post 跨域
//显示浮层postAjax:function(url,param,callback){ var loadScore = layer_.load(1,{shade: [0.8,'#393D49']}) ...
- 压力测试工具--Siege
Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力.可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行.s ...
- 第十一条理解objc_masgSend的作用
Objetive-C最基本的的东西就是它的消息机制.Objective-C运行时的最基本的东西就是 objc_msgSend, 它就是负责发送一个消息给对象的C函数. 当你写下面这样的代码时: ...
- Opencv Match Template(轮廓匹配)
#include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...
- Linux网络配置之虚拟网卡的配置(ubuntu 16.04)
关于图形界面的配置,我这里就不多介绍了,这个很简单.这里介绍的是如何通过修改配置文件来实现虚拟网卡. 首先介绍ubuntu(我这里使用的是ubuntu-16.04)下虚拟网卡的配置 1.先用ifcon ...
- mysqli_query(“set nams utf8”)为FALSE
经过过测试: mysqli_query("set nams utf8")必须在所有语句的执行之前,否则会返回FALSE. 看手册,说不建议用mysqli_query来设置编码,用 ...
- Spring Boot利用poi导出Excel
至于poi的用法就不多说了,网上多得很,但是发现spring boot结合poi的就不多了,而且大多也有各种各样的问题. public class ExcelData implements Seria ...
- java Concurrent包学习笔记(二):CountDownLatch和CyclicBarrier
一.CountDownLatch CountDownLatch一个线程同步的工具,是的一个或者多个线程等待其他线程操作完成之后再执行. CountDownLatch通过一个给定的数值count来进行初 ...
- yii2 定义友好404
1.frontend->config->main.php添加如下: 'errorHandler' => [ 'errorAction' => 'site/error', ], ...
- Java虚拟机学习(1): 类加载机制
转自:微信公共号ImportNew 来源:java2000_wl 链接:blog.csdn.net/java2000_wl/article/details/8040633 JVM把class文件加载的 ...