比武招亲(上)(思维+贡献法+组合数学隔板法详解)
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;
}
比武招亲(上)(思维+贡献法+组合数学隔板法详解)相关推荐
- dijkstra标号法表格_标号法求最短路径例题详解.ppt
标号法求最短路径例题详解 r * 最短路径 带权图G=, 其中w:E?R. ?e?E, w(e)称作e的权. e=(vi,vj), 记w(e)=wij . 若vi,vj不 相邻, 记wij =?. 设 ...
- 数学建模二:TOPSIS法(优劣解距离法) 附代码详解
数学建模二:TOPSIS法(优劣解距离法)附代码详解 TOPSIS法(优劣解距离法)用于评价类问题. 层次分析法因为受限于一致性检验指标的数量,最多只能选择15个准则或方案.同时层次分析法也难以处理已 ...
- 数据不平衡(class_weight、评估方法、上采样、下采样)、详解及实战
数据不平衡(class_weight.评估方法.上采样.下采样).详解及实战 核心学习函数方法: np.random.choice() np.where() np.concatenate() np.v ...
- linux 用root安装mysql数据库_Linux上安装Mysql及简单的使用详解
1. 安装mysql sudo apt-get update sudo apt-get install mysql-server sudo apt-get install python-mysqldb ...
- windows上安装Anaconda和python的教程详解
一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...
- python安装教程windows-windows上安装Anaconda和python的教程详解
一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...
- 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 ...
- 怎么在手机上取消双重认证_用手机在淘宝上怎么开网店?流程步骤详解
这是一篇关于"用手机在淘宝上怎么开网店?流程步骤详解"的文章: 开网店因为门槛低.收益大,成为众多年轻人创业的首选.很多新手朋友们都想开一家属于自己的网店,但是苦于没有经验, ...
- linux上传文件命令ftp put,Linux ftp 命令行中下载文件get与上传文件put的命令应用详解...
介绍:从本地以用户anok登录的机器192.168.0.16上通过ftp远程登录到192.168.0.6的ftp服务器上,登录用户名是peo.以下为使用该连接做的实验. 查看远程ftp服务器上用户pe ...
最新文章
- 一文入门 Python 数据分析库 Pandas
- null in JavaScript
- iOS旋钮动画-CircleKnob
- Linux下安装Jboss
- 基于各种基础数据结构的SPFA和各种优化
- C# ConcurrentBag的实现原理
- 移动互联网广告 - 第十更 - 广告投放运营 DashBoard - 2016/12/10
- iOS 怎么设置 UITabBarController 的第n个item为第一响应者?
- Eclipse离线安装Emmet插件----web开发者绝对熟悉的插件之一
- SQL Server数据库查询速度慢的原因
- ibatis #于 $区别
- 四叶草clover配置工具Clover Configurator 5 Ma汉化版
- 520 miix 小兵 黑苹果_【黑果小兵】macOS Big Sur 11.0.1 20B50 正式版 with Clover 5126 黑苹果系统镜像下载...
- 关于利用DEM生成水系图
- 医院患者随访管理系统
- PMP考试计算公式汇总
- c语言字符动画源码下载,C语言程序实例大全(220个精彩源码下载)
- java excel 批注_Java 添加、修改、读取、复制、删除Excel批注
- 猎人猎物优化算法HPO
- 《面试无忧》--DCL单例模式为什么要用volatile修饰?