https://ac.nowcoder.com/acm/contest/9985/B


思路:

首先贡献法考虑每个数作为最大值出现的次数和最小值出现的次数。

那么最终答案其实是xi作为最大数-xj作为最小数,是很多个这样的差累加。那么把左边的被减数合成一块,右边的减数合成一块。答案就变成了每个最大数*其出现的次数-每个最小数*其出现的数。

考虑1~n中挑一个x作为最大数。

那么1~x-1就是作为剩下的。我要在剩下的1~x-1中挑出可重复的数字构成m个不递减的。

公式为ccc(n+m-1,m);(n个数中取m个重复的数构成不递减

至于怎么证明,大致这么说明。

首先不考虑重复,那问题就相当于n个球分到m个盒子,用隔板法解决是C(m n-1)

然后由于可以空盒子不满足隔板条件,于是提前加m个球。这时候公式是C(m,n+m-1)

我们再来看两者答案的区别。

对于后面求得的答案,这时候我们保证里面每个盒子至少有一个球,我们再将其每个盒子里的球数统统-1,是不是就变成了可以有空盒子的情况。两者的情况的数量是一样的,所以答案等价的。

本题就是挑m-1个


隔板法博客插眼

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=5e5+1000;
typedef long long LL;
const LL mod=998244353;
inline LL read(){LL x=0,f=1;char ch=getchar();   while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
LL fac[maxn];
LL ksm(LL a,LL k){LL res=1;while(k>0){if(k&1) res=res*a%mod;k>>=1;a=a*a%mod;}return res%mod;
}
LL ccc(LL m,LL n){///ccc(4,3)if(n>m) return 0;return (fac[m]%mod*ksm(fac[n],mod-2)%mod*ksm(fac[m-n],mod-2)%mod)%mod;
}
///ccc(n+m-1,m);(n个数中取m个重复的数构成不递减
int main(void)
{cin.tie(0);std::ios::sync_with_stdio(false);fac[0]=1;for(LL i=1;i<maxn;i++) fac[i]=fac[i-1]*i%mod;LL n,m;cin>>n>>m;LL ans=0;for(LL i=1;i<=n;i++){LL temp1=i-1;LL temp2=n-i;ans=(ans%mod+i*ccc(temp1+m-1,m-1)%mod)%mod;ans=(ans%mod-i*ccc(temp2+m-1,m-1)%mod+mod)%mod;}cout<<ans%mod<<"\n";
return 0;
}

比武招亲(上)(思维+贡献法+组合数学隔板法详解)相关推荐

  1. dijkstra标号法表格_标号法求最短路径例题详解.ppt

    标号法求最短路径例题详解 r * 最短路径 带权图G=, 其中w:E?R. ?e?E, w(e)称作e的权. e=(vi,vj), 记w(e)=wij . 若vi,vj不 相邻, 记wij =?. 设 ...

  2. 数学建模二:TOPSIS法(优劣解距离法) 附代码详解

    数学建模二:TOPSIS法(优劣解距离法)附代码详解 TOPSIS法(优劣解距离法)用于评价类问题. 层次分析法因为受限于一致性检验指标的数量,最多只能选择15个准则或方案.同时层次分析法也难以处理已 ...

  3. 数据不平衡(class_weight、评估方法、上采样、下采样)、详解及实战

    数据不平衡(class_weight.评估方法.上采样.下采样).详解及实战 核心学习函数方法: np.random.choice() np.where() np.concatenate() np.v ...

  4. linux 用root安装mysql数据库_Linux上安装Mysql及简单的使用详解

    1. 安装mysql sudo apt-get update sudo apt-get install mysql-server sudo apt-get install python-mysqldb ...

  5. windows上安装Anaconda和python的教程详解

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

  6. python安装教程windows-windows上安装Anaconda和python的教程详解

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

  7. linux rpm安装zabbix,CentOS 7上安装Zabbix Server 3.0 图文详解

    CentOS 7上安装Zabbix Server 3.0 图文详解 1.查看系统信息. cat /etc/RedHat-release CentOS Linux release 7.0.1406 (C ...

  8. 怎么在手机上取消双重认证_用手机在淘宝上怎么开网店?流程步骤详解

       这是一篇关于"用手机在淘宝上怎么开网店?流程步骤详解"的文章: 开网店因为门槛低.收益大,成为众多年轻人创业的首选.很多新手朋友们都想开一家属于自己的网店,但是苦于没有经验, ...

  9. linux上传文件命令ftp put,Linux ftp 命令行中下载文件get与上传文件put的命令应用详解...

    介绍:从本地以用户anok登录的机器192.168.0.16上通过ftp远程登录到192.168.0.6的ftp服务器上,登录用户名是peo.以下为使用该连接做的实验. 查看远程ftp服务器上用户pe ...

最新文章

  1. 一文入门 Python 数据分析库 Pandas
  2. null in JavaScript
  3. iOS旋钮动画-CircleKnob
  4. Linux下安装Jboss
  5. 基于各种基础数据结构的SPFA和各种优化
  6. C# ConcurrentBag的实现原理
  7. 移动互联网广告 - 第十更 - 广告投放运营 DashBoard - 2016/12/10
  8. iOS 怎么设置 UITabBarController 的第n个item为第一响应者?
  9. Eclipse离线安装Emmet插件----web开发者绝对熟悉的插件之一
  10. SQL Server数据库查询速度慢的原因
  11. ibatis #于 $区别
  12. 四叶草clover配置工具Clover Configurator 5 Ma汉化版
  13. 520 miix 小兵 黑苹果_【黑果小兵】macOS Big Sur 11.0.1 20B50 正式版 with Clover 5126 黑苹果系统镜像下载...
  14. 关于利用DEM生成水系图
  15. 医院患者随访管理系统
  16. PMP考试计算公式汇总
  17. c语言字符动画源码下载,C语言程序实例大全(220个精彩源码下载)
  18. java excel 批注_Java 添加、修改、读取、复制、删除Excel批注
  19. 猎人猎物优化算法HPO
  20. 《面试无忧》--DCL单例模式为什么要用volatile修饰?

热门文章

  1. jQuery动态生成的元素如何绑定事件
  2. WPF中DataGrid控件
  3. 程序员福音:阿里首创7天全薪陪伴假升级员工福利
  4. java正则表达式空行_通过正则表达式删除空行的方法
  5. Ansys显示立体模型
  6. 5个Linux设置开机启动某个程序(例如自己的项目)的方法
  7. chrome插件开发时跨域问题解决方案
  8. 浅谈路由器的路由功能
  9. linux系统最新排名,ubuntu linux排行_linux操作系统排行
  10. JavaScript中 防抖节流