LINK

直接考虑数字 i i i作为最大值多少次,作为最小值多少次

最大值加,最小值减,即可得解。

首先 m m m个数字先选出一个 x x x作为最大值,相当于求 [ 1 , x − 1 ] [1,x-1] [1,x−1]选出 m − 1 m-1 m−1个数

求有多少种本质不同的方案

然后 m m m个数字先选出一个 x x x作为最小值,相当于求 [ x , n ] [x,n] [x,n]选出 m − 1 m-1 m−1个数

求有多少种本质不同的方案

我们发现本质都是相同的,稍微把模型转化以下,我们需要解决这样一个问题

m m m个小球分成 n n n组,求本质不同的分法

m m m个小球形成 m − 1 m-1 m−1个间隙,插入 n − 1 n-1 n−1块隔板可以分成 n n n组

方案数是 C m − 1 n − 1 C_{m-1}^{n-1} Cm−1n−1​

但是由于每组可以为空,所以我们往每组里提前加一个小球,就不是空的了,方案数是

C m + n − 1 n − 1 C_{m+n-1}^{n-1} Cm+n−1n−1​


[题外话]

其实也可以直接枚举每种方案的差值 d d d

差值为 d d d的最大最小值有 n − d n-d n−d种选法,剩下把 d + 1 d+1 d+1个不同的数拿出 m − 2 m-2 m−2个

这就和上面一样应用隔板法了


#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6+10;
const int inf = 1e9;
const int mod = 998244353;
int ans = 0,fac[maxn],n,m;
int quick(int x,int n)
{int ans = 1;for( ; n ; n>>=1,x=x*x%mod )if( n&1 ) ans = ans*x%mod;return ans;
}
int c(int n,int m)
{if( n<m||n<0||m<0 )   return 0;return fac[n]*quick( fac[m]*fac[n-m]%mod,mod-2)%mod;
}
int get(int x) { return c(m-1+x,x-1); }
signed main()
{//枚举最小值fac[0] = 1;for(int i=1;i<=1000000;i++)  fac[i] = fac[i-1]*i%mod;cin >> n >> m; m--;for(int i=1;i<=n;i++){ans = ( ans+i*get(i)%mod )%mod;ans = ( ans-i*get(n-i+1)%mod )%mod;}cout << ( ans%mod+mod )%mod;
}

2021牛客训练营5 B 比武招亲(上)(组合数学)相关推荐

  1. 2021牛客训练营 F.魏迟燕的自走棋(贪心并查集)

    传送门 费用流会 T T T,但是没试过 H K HK HK之类的 STD 设武器作用于 x , y x,y x,y两个人(如果 k = 1 k=1 k=1那么令 x = y x=y x=y),收益为 ...

  2. 2021牛客寒假算法基础集训营5 B.比武招亲(上)

    2021牛客寒假算法基础集训营5 B.比武招亲(上) 题目链接 题目描述 众所周知,天姐姐只喜欢天下最聪明的人,为了找到这样的人,她决定比武招亲! 只见天姐姐在榜上留下了这样一道问题,谁做出来了就可以 ...

  3. 2021牛客暑期多校训练营1 赛后总结

    比赛名称: 2021牛客暑期多校训练营1 比赛时间: 2021年7月17日 12:00 - 17:00 比赛结果: 3/11 自我总结: 这场比赛应该算是这个假期的第二场团队赛了, 之前打过一个比较简 ...

  4. 2021牛客暑期多校训练营9 Cells(LGV引理,FFT)

    2021牛客暑期多校训练营9 Cells(LGV引理,FFT) 题目链接 题意 在一个无限大的xyxyxy​坐标轴上,求从A={(0,a1),(0,a2),...,(0,an)}A=\{(0,a_1) ...

  5. 2021牛客暑期多校训练营

    2021牛客暑期多校训练营1 A- Alice and Bob /* 博弈问题 两堆石头,每人每次从其中一堆拿k(k>0)个, 同时从另一堆拿s*k个(s>=0),不能进行操作的即失败 * ...

  6. 训练实录 | 2021牛客暑期多校训练营2

    2021牛客暑期多校训练营2 传送门 C - Draw Grids solved by oye. 00:22:07(+) 题意: 给n,m两个数,表示有n行点和m列点,已知每次只能连两个相邻的点(斜的 ...

  7. 2021牛客暑期多校训练营9

    2021牛客暑期多校训练营9 题号 题目 知识点 A A Math Challenge B Best Subgraph C Cells D Divide-and-conquer on Tree E E ...

  8. 2021牛客暑期多校训练营5

    2021牛客暑期多校训练营5 题号 题目 知识点 A Away from College B Boxes 概率 C Cheating and Stealing D Double Strings 线性d ...

  9. 2021牛客暑期多校训练营4

    2021牛客暑期多校训练营4 题号 题目 知识点 A Course B Sample Game C LCS D Rebuild Tree E Tree Xor 思维+线段树 F Just a joke ...

最新文章

  1. 知乎高赞:OracleJDK和OpenJDK有什么区别?网友:不愧是大神的回答~
  2. ns 25的IKE模式ipsec ***配置
  3. 屏幕截图功能的实现------Java篇
  4. oracle 自增1,oracle自增无法从1开始
  5. 业务多变的公司上云后蒸蒸日上
  6. 项目计划定制:项目计划划分与产品项目推进的有机结合
  7. Json动态添加属性
  8. 免费讲座:网站运营之人性、策略与实战
  9. dos2unix命令解决 Shell 脚本无法执行的问题
  10. Java内存监控程序_java内存监控工具及命令
  11. MySQL 8.0 drop table恢复
  12. 基于JavaScript实现的网页版贪吃蛇
  13. linux flock 命令安装,在Linux上使用flock命令控制程序的异步执行
  14. Swingbench 博客合集
  15. (翻译)Decision-Making in Driver-Automation Shared Control
  16. 基于机器学习的车牌识别系统(Python实现基于SVM支持向量机的车牌分类)
  17. xp下硬盘安装Ubuntu Kylin 14.04
  18. linux 防火墙 功能点,功能点(Funciton Point FP)估算法(三) 调整因子
  19. QGtkStyle was unable to detect the current GTK+ theme
  20. 原码、反码、补码之间的转换和简单运算

热门文章

  1. springclound概述
  2. Transactional注解 isolation propagation
  3. 任命一位国家首席技术官
  4. 用html编写一个红绿灯,如何用html+css+javascript写一个简易红绿灯
  5. 查询并批量插入数据的Sql命令
  6. 微信小程序入门与实战(七月)
  7. HIT 软件构造 过程、系统、工具
  8. 小米9SE 刷机国际版系统时秒刷或者是出现Not catch checkpoint错误的解决方法
  9. [AUI] Liferay AUI editable的使用
  10. 架构期刊人物述评:Ray Ozzie