2021牛客寒假算法基础集训营5 比武招亲(上)(组合数)

MTK Linux DRM分析(八)- KMS drm_crtc.c CRTC 在 Linux DRM 子系统中是显示控制的核心,负责时序生成、模式设置和管线的调度。理解其工作原理和 API 对于进行底层图形开发、调试显示问题或 simply understanding how your graphics stack works 都至关重要。 阅读详情

链接:https://ac.nowcoder.com/acm/contest/9985/B
来源:牛客网

题目描述

众所周知,天姐姐只喜欢天下最聪明的人,为了找到这样的人,她决定比武招亲!

只见天姐姐在榜上留下了这样一道问题,谁做出来了就可以俘获她的芳心!

爱慕天姐姐已久的泽鸽鸽问询赶来,只见榜上写着:

给定 n,m,定义一种序列,构造方法如下:

1.1. 在 [1,n] 中任意选择 m 次,得到了 m 个整数(显然数字可能相同);

2.2. 将选出的 m 个数字排序之后得到一个序列 {a1,a2,…,am}。

定义一个序列的贡献为 max{a1,a2,…,am}−min{a1,a2,…,am},求所有本质不同的序列的贡献和。

为了防止结果过大,将答案为 998244353 取模后输出。
(对于两个序列长度为m的序列 A、B,若 ∃i∈[1,m],Ai≠Bi,则序列 A、B 本质不同)

泽鸽鸽心有余而力不足,而你作为他最好的基友决定帮助泽鸽鸽俘获美人心!

现在,这个重任就交给你啦!

输入描述

一行输入两个正整数 n,m
【数据规模与约定】
1 <= n, m <= 5*10^5

输出描述

一行一个整数,为答案对 998244353 取模后的结果。

示例1

输入

3 2

输出

4

说明

本质不同的序列有如下几种:1 1、2 2、3 3、1 2、1 3、2 3,贡献为 0+0+0+1+2+1=4。

看到的第一感觉是一个dp,思考f[n][m]怎样从f[n-1][m-1]或者f[n][m-1],f[n-1][m]转移而来,但是没想出来,觉得像是和组合数的方法数统计有关。

前置知识复习:
1.组合数递推。
2.乘法逆元。

1.组合数可以通过用公式算得,所以只需递推出n的阶乘即可。

公式为:C(n,m) = n ! / (n - m) ! * m !

2.乘法逆元的线性递推,这个看起来好像有一点点的复杂,在两三年前我曾经懂得这个的完全推法,但是现在的我已经伤仲永了… 先记住线性递推逆元的写法,至于原理之后再研究…
但是 ! 由于这道题的性质, p 是一个质数并且阶乘的数字比较大所以用小费马定理可以比较方便的求出逆元的大小。

inv[i] = (mod-mod/i) * inv[mod % i] % mod; // 一行线性递推乘法逆元。
小费马定理是: inv(x) = power(a, p-2, p);

现在可以开始写这道题了。

思路:

根据问题,计算贡献和大致是dp或者排列组合计数来解。仔细一看发现和DP没啥关系,于是考虑组合计数。

首先根据题意,知道一个序列的最大值和最小值后这个序列的贡献就可以被唯一确定出来,即最大值减最小值。不妨设某个长度为m的序列最大值为mx,最小值为mn,那么这个序列排序后究竟长什么样呢?是mn, …, …, …, … …, mx。肯定有一个mx和一个mn是确定的,关键在于剩下m - 2个数有多少种选法。我们用选法数乘以(mx - mn)就能得到最大值为mx最小值为mn的所有序列的总贡献了。而易知剩下m - 2个数肯定都在[mn, mx]内,现在就转化为一个高中常见的排列组合问题:x个相同的小球放入y个盒子,允许有空盒,问一共有多少种放法。答案是C(x + y - 1, y - 1)。对于这个问题而言,相当于m - 2个数分配到[mn, mx]的区间内,允许有数不被覆盖,问有多少种分配方法。即C(m - 2 + mx - mn, mx - mn - 1)。

组合数取模有模版,根据卢卡斯定理,预处理出逆元来就可以计算。那么问题来了:最大值和最小值怎么确定。直接二重循环枚举肯定t得妈妈都不认识,但其实没有必要二重循环。注意到mn = 1, mx = 5和mn = 2, mx = 6的情况其实答案相同,因此我们直接枚举mx - mn(mx - mn其实也是贡献),再乘上这样的区间个数计算即可。

坑点:预处理逆元的时候要开2倍n的大小!这个要根据组合数计算的范围来开!

这中间用到了组合数学的一些知识,那一个盒子放数的模型也要等到后面再研究了。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 8;
const int p = 998244353;

ll n, m, ans = 0;
ll f[maxn];

ll power(ll a, ll b, ll p) {
    ll res = 1 % p;
    while(b) {
        if (b&1) res = (ll) res * a % p ;
        a = (ll) a * a % p;
        b >>= 1;
    }
    return res;
}

inline ll inv(ll x) {
	return power(x, p-2, p);
}

void init() {
	cin >> n >> m;
	f[0] = f[1] = 1;
	for (int i=2;i<=maxn;++i) 
		f[i] = f[i - 1] * i % p; 
}

inline ll C(ll n, ll m) {
	if (n == m|| m == 0)	return 1;
	return (f[n] * inv(f[m]) % p * inv(f[n - m]) % p);
}

int main() {
	init();
	for (int d=1;d<=n-1;++d) {
		ll tmp = d * (n - d) % p;
		ans = (ans + tmp * C(d + m - 2, m - 2) % p) %p;
	}
	cout << ans;
	return 0;
} 
SAP_MM模块采购价格确定控制简介 SAP MM模块采购价格确定控制是采购管理中的关键功能,系统通过"价格确定日期"判断条件记录有效性并带出正确价格。文章分析了四种常见业务场景及其对应的价格确定方案:普通采购订单(创建日期)、长期合同(交货日期)、特殊业务(手动输入)和接口下单(系统传入)。详细介绍了配置方法和前台操作步骤,并提供了不同业务类型对应的推荐控制方式汇总表。通过合理设置价格确定日期控制,企业可以确保采购价格准确性,满足各种复杂业务场景下价格管理的需求,从而提高采购管理效率和成本控制能力。 阅读详情

相关推荐

告别路径打架!用Python实现CBS算法搞定仓库机器人调度(附完整代码)

本文详细介绍了如何使用Python实现CBS(Conflict-Based Search)算法解决仓库机器人调度中的路径冲突问题。通过多智能体路径规划(MAPF)技术,有效避免AGV在智能仓库中的碰撞和死锁,提供完整代码实现和工业场景优化技巧,帮助开发者快速构建高效的机器人调度系统。

weixin_30275415的博客 327

【2021牛客寒假第六场】F-组合数问题 二项式定理

【2021牛客寒假第六场】F-组合数问题 复数二项式定理题意思路Code 传送门:https://ac.nowcoder.com/acm/contest/9986/F 这一题其实很难的,不过过了那么多人就离谱,估计大部分都是OEIS的吧。 题意 输出Cn0+Cn4+Cn8+...+Cnn    (4|n)输出C_n^0+C_n^4+C_n^8+...+C_n^n\;\;(4|n)输出Cn0​+Cn4​+Cn8​+...+Cnn​(4|n) 思路 我们知道我们知道我们知道 (1+1)n=Cn0+Cn1+...

狙击美佐的博客 366

拯救你的备份数据!STM32F407 RTC Tamper功能防篡改设计指南

本文详细介绍了STM32F407 RTC Tamper功能在物联网数据安全中的应用,包括硬件触发、数据清除和时间戳记录等核心机制。通过实战案例和代码示例,展示了如何构建多层次的防御体系,确保敏感数据在物理入侵时自动擦除并记录精确时间戳,适用于智能门锁、工业传感器等高安全需求场景。

weixin_28278377的博客 278

牛客竞赛——组合数问题

组合数数学公式:c[i][j]=c[i-1][j]+c[i-1][j-1],特殊c[0][0]=1; 此题如果直接暴力超时,需要预处理,求一个前缀和。。。。。。 #include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include&...

小糊涂的博客 519

CentOS 7下Oracle 11G RAC静默安装避坑指南:从网络规划到共享存储配置全流程

本文详细介绍了在CentOS 7环境下进行Oracle 11G RAC静默安装的全流程,包括网络规划、共享存储配置和系统参数调优等关键步骤。特别针对静默安装过程中的常见问题提供了实用的避坑指南和优化建议,帮助技术人员高效完成企业级数据库部署。

weixin_29234509的博客 123

《21天学通C++》阶段性成果测试题——hstring(手写string类)

总体考察了类的使用,缓冲区考察了指针和数组的使用、增删改查、考察编码思维、考察了类的重载。1.初始化子字符串的起始位置为-1,表示未找到,若buffer或findHstring为空,则返回-1。右边的字符串不为空,则分别获取母串和子串的长度(用循环),然后创建一个固定大小的数组。3.然后循环遍历寻找子串在母串中的起始位置,循环时可以通过两个长度相减,避免循环越界。2.如都不为空,则分别获取双方的字符串长度(用循环),然后。右边的字符串为空,则输出原来的字符串。是否为空,有一方为空则返回另一方。

立志成为炼丹师? 1263

牛客竞赛数学专题班简单排列和组合(排列组合问题、阶乘、组合数)

传送门 E-The Intriguing Obsession code: #include<bits/stdc++.h> #define endl '\n' #define ll long long using namespace std; const int maxn = 2e5 + 9; const int mod = 998244353; ll n, m, t; ll fac[maxn]; ll q_pow(ll a, ll n, ll ans = 1){ while(n){ if

cosx_的博客 522

目标检测 RT-DETR(2023)详细解读

在使用了这个技巧后,显然训练过程中,类别的标签不再是此前的0和1离散值,而是0~1的连续值。关于 Query Selection(查询向量选择),大家应该并不陌生,这个方法可谓在DETR领域大杀四方,如DAB-DETR对查询向量进行重构理解,将其解释为Anchor,DN-DETR通过查询降噪来应对匈牙利匹配的二义性所导致的训练时间长的问题,DINO提出从Encoder中选择Top-k特征进行学习等一系列方法,这都无疑向我们证明,查询向量很重要,选择好的Query能够让我们事半功倍。在RT-DETR中,

qq_51352130的博客 5865

牛客——组合数问题(组合数+二维前缀和)

组合数表示的是从 n 个物品中选出 m 个物品的方案数。举个例子,从 (1, 2, 3) 三个物品中选择两个物品可以有 (1, 2),(1, 3),(2, 3) 这三种选择方法。 根据组合数的定义,我们可以给出计算组合数的一般公式: 小葱想知道如果给定 n,m 和 k,对于所有的 0 ≤ i ≤ n,0 ≤ j ≤ min(i,m)有多少对 (i, j) 满足是 k 的倍数。 输入描...

red_red_red的博客 889

告别QWebEngineView!用QtLocation+SQLite打造离线地图应用(附完整源码)

本文详细介绍了如何利用QtLocation模块与SQLite数据库构建高性能离线地图引擎,解决传统QWebEngineView方案在网络依赖、内存占用和定制化方面的不足。通过多级缓存机制、异步写入优化和纹理压缩技术,实现工业级应用的稳定运行和高效渲染,特别适合车载导航和野外勘探等场景。

weixin_30431445的博客 362

使用STC15F104W产生PWM脉冲

最近的小项目中使用到了STC15F104W产生PWM脉冲

yeats1989的专栏 1万+

牛客月赛17-计数-(组合数+球盒问题)

J 题意: 给你一个数组,这个数组是单调不增的,但是有些位置的数丢失了,现在问你合法的数组一共有多少个,对1e9+7取模。同时数组中的每个数都是1到1000。 思考: 刚开始看着像dp,感觉不太好做,其实呢主要是还是对球和盒子问题不太熟悉。这个题就是球和盒子问题,比如9 0 0 7,那么可以放的数是9 8 7,一共3个,然后有两个0也就是2个球,那么就是2个求放到3个盒子里,盒子可以空,问你有多少种放法。这就是球和盒子的经典问题C(n+m-1,m-1)。 代码: int T,n,m,k; int va[N]

m0_52398496的博客 230

2021-10-29【微生物】丨基于qiime2工具16S/ITS分析全套流程(上)

目录摘要工具与方法使用命令结果展示总结二级目录三级目录 摘要 前两个月项目特别多,最近终于有机会闲下来写点文章,把之前搭建的流程梳理一遍。前同事分析16S/ITS使用的qiime1,我接手后感觉不太适应,希望能够使用新版本来搭建,于是花了几天时间重新搭了这个流程, 工具与方法 使用工具:qiime2 使用版本:qiime2-2021.4 参考文档:https://docs.qiime2.org/2021.4/(最新版本2021.8) 使用命令 在这里插入代码片 结果展示 总结 二级目录 三级目录 ...

1万+

【组合数+隔板法】2021牛客寒假算法基础集训营5 B 比武招亲(上)

组合数+隔板法 比武招亲(上) 题目大意 解题思路 枚举差值 ddd。 难点在于用 xxx 个数字,构造一个单调不减的序列,序列元素个数为 m−2m-2m−2。 理解一 运用隔板法,把相同的数字从小到大看作一堆一堆的,隔板插在不同的堆之间。 如数字从 [1,3][1,3][1,3] 中选 444 个时,方法可以如下: 1 | 2 2 | 3 但也有这样的情况: 1 1 1 | | 3 可以看到,隔板可以连在一起,即不选其中的某个数。 原来的空位画出来如下: □ 1 □ 1 □ 1 □ 3 □ 此时的

Encore47的博客 301

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

2021牛客寒假算法基础集训营5 B.比武招亲(上) 题目链接 题目描述 众所周知,天姐姐只喜欢天下最聪明的人,为了找到这样的人,她决定比武招亲! 只见天姐姐在榜上留下了这样一道问题,谁做出来了就可以俘获她的芳心! 爱慕天姐姐已久的泽鸽鸽问询赶来,只见榜上写着: 给定 n,mn,mn,m,定义一种序列,构造方法如下: 在 [1,n][1,n][1,n] 中任意选择 mmm 次,得到了 mmm 个整数(显然数字可能相同); 将选出的 mmm 个数字排序之后得到一个序列 {a1,a2,...,am}\{

旺崽的博客 2020

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

2021牛客寒假算法基础集训营5

E. 树上博弈(状压dp) 传送门 数据大小摆明了要状压,定义为状态 i 的最大值,i 中为1的二进制位表示结点已经被删除,为0表示未被删除。这里边的储存比较灵活,用的第 j 个二进制位为1表示 i、j 之间有边。 PS:今天注意到一个事情,memset初始化为 -inf 时,数组中的值和 -inf 不相等,随即科普了一下memset的初始化原理:(摘自巨佬~) 因为char是1字节,memset是按照字节赋值的,相当于把每个字节都设为那个数,所以char型的数组可赋任意值,int是4个字节...

。 244

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

2021牛客寒假算法基础集训营5(A B D F G)

比赛链接:这里 OP 个人能力有限,有的题目实在知识点欠缺太多,这里是大佬的题解 A 待补 B 比武招亲(上) 组合数,递推,多重集(这里和这里) 思路 我们可以先枚举差值 d∈[0,n−1]d\in[0,n-1]d∈[0,n−1],对于每一个差值 ddd,都有 n−dn-dn−d 种最小值。 确定了最小值和 d ,便可以确定最大值,下一步我们需要算出对于每一种 d ,的一种最小值下有多少种组合: 我们可以讲问题转化成 在网格内,从 ( 0 , 0 ) 点到 ( a , b ) 点的最短路径数。 总共一

Tan_Yuu的博客 405

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

链接 https://ac.nowcoder.com/acm/contest/9985/B 题意 给定 n,mn,mn,m,定义一种序列,构造方法如下: 在 [1,n][1,n][1,n] 中任意选择 mmm 次,得到了 mmm 个整数(显然数字可能相同); 将选出的 mmm 个数字排序之后得到一个序列 {a1,a2,...,am}\{ a_{1},a_{2},...,a_{m} \}{a1​,a2​,...,am​} 定义一个序列的贡献为 max⁡{a1,a2,...,am}−min⁡{a1,

c4Lnn 的 优快云 博客 282

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

链接 https://ac.nowcoder.com/acm/contest/9985/B 思路 打表,得出一个7X7的表,根据行(m相同的情况下)找规律 第一行差分数列可以写成组合数形式C(n, 3),接下来自然而然推出来了 1C(n, 3) 2C(n, 4) 3*C(n, 5) 记得预处理1e6的阶乘,不是5e5,wa了一发,挺可惜的 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef u

萧瑟的博客 328

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

B.比武招亲(上) 题目链接:https://ac.nowcoder.com/acm/contest/9985/B 题目描述: 众所周知,天姐姐只喜欢天下最聪明的人,为了找到这样的人,她决定比武招亲! 只见天姐姐在榜上留下了这样一道问题,谁做出来了就可以俘获她的芳心! 爱慕天姐姐已久的泽鸽鸽问询赶来,只见榜上写着: 给定 n,m,定义一种序列,构造方法如下: 1.在 [1,n]中任意选择 m 次,得到了 m 个整数(显然数字可能相同); 2.将选出的 m 个数字排序之后得到一个序列{a1,a2,…,am}。

马克菠萝包ଲ的博客 235

lq的膜你赛

爆零记

curry的博客 336

『数 变进制状压dp』

数 Description 给定正整数n,m,问有多少个正整数满足: (1) 不含前导0; (2) 是m的倍数; (3) 可以通过重排列各个数位得到n。 \(n\leq10^{20},m\leq100\) Input Format 一行两个整数n,m。 Output Format 一行一个整数表示答案对998244353取模的结果。 Sample Input 1 1 Sample O...

weixin_34238642的博客 215

2019计蒜之道 第四场 A 矩阵计数

Description: 腾讯游戏开发了一款全新的编程类益智小游戏,榜首的题目是一道关于矩阵的计算,你用多久能计算出来呢? 游戏中给出一个 N×M的矩阵,若其中填入的内容是数字1∼N×M的排列,求问有多少种不等价的矩阵? 等价矩阵:若一个矩阵A可以通过交换其中两行或者两列变成另一个矩阵BB,则称A和B等价。且若A和B等价,B和C等价,则A和C也等价。 ...

邵光亮的博客 797

【2021牛客寒假第五场】B-比武招亲(上)排列组合

【2021牛客寒假第五场】比武招亲(上)排列组合题意思路Code(44MS) 传送门: 题意 思路 考虑最大值和最小值贡献。考虑最大值和最小值贡献。考虑最大值和最小值贡献。 先看最大值:先看最大值:先看最大值: 假设我们选择最大值为x,则剩下m−1个位置只能选不超过x的数字假设我们选择最大值为x,则剩下m-1个位置只能选不超过x的数字假设我们选择最大值为x,则剩下m−1个位置只能选不超过x的数字 题目表示排完序之后本质不同!\red{题目表示排完序之后本质不同!}题目表示排完序之后本质不同! 所以就是在不

狙击美佐的博客 1210

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

题目链接 题目描述 思路 选取的序列a可能的贡献有 0,1,2,3,…,n-1。 设a的贡献为d。 贡献为d的序列有 [1,…,1+d], [2,…,2+d]… (共有n-d个这样的序列) 对贡献为d的序列a进行分析。 如果a的第一位为v,最后一位就为v+d。(因为a为非递减数列) 剩余m-2个地方需要填充。 问题就转变为,将 [v,v+1,v+2,…,v+d] 中的m-2个数字(可以重复,但序列需要是非递减数列)填入序列,求本质不同的序列个数。 用到的知识点为隔板法 举例说明一下: 将[1,2,3]中

Moyan的博客 1443
上一篇: 博弈论入门
下一篇: Hyperledger fabric开发入门
TobinMEng
博客等级 码龄9年 7粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值