【组合数+隔板法】2021牛客寒假算法基础集训营5 B 比武招亲(上)
组合数+隔板法
比武招亲(上)
题目大意
解题思路
枚举差值 d d d。
难点在于用 x x x 个数字,构造一个单调不减的序列,序列元素个数为 m − 2 m-2 m−2。
理解一
运用隔板法,把相同的数字从小到大看作一堆一堆的,隔板插在不同的堆之间。
如数字从 [ 1 , 3 ] [1,3] [1,3] 中选 4 4 4 个时,方法可以如下:
1 | 2 2 | 3
但也有这样的情况:
1 1 1 | | 3
可以看到,隔板可以连在一起,即不选其中的某个数。
原来的空位画出来如下:
□ 1 □ 1 □ 1 □ 3 □
此时的情况如下:
□ 1 □ 1 □ 1 | | 3 □
(两个隔板只占了一个空位的位置)
可以看到,现在的空位是 m − 1 m - 1 m−1 个,但这种隔板相连的情况就不好计算。
因此,我们看作给每个隔板"批发"了一个空位,并且是固定隔板的左边。
即:
现在的 □ | = 原来的 |
现在的 □ □ | = 原来的 □ |
这样的话空位数应该是 m − 1 + d m - 1 + d m−1+d。
但考虑到,第一个隔板只能从第二个位置开始放,否则我们前面假设好的固定在左边的空位就没了,因此最后空位数为 m − 1 + d − 1 = m − 2 + d m - 1 + d - 1 = m-2+d m−1+d−1=m−2+d。
所以最后的选法有 C m − 2 + d d C^d_{m-2+d} Cm−2+dd 种。
理解二
感觉上面的比较抽象,下面再贴一个博主的解释:
注意事项
组合数要预处理,否则会 T。
参考代码
#include<stdio.h>
#include<iostream>
#include<vector>
#include<cstring>
#include<cstdio>
#include<climits>
#include<cmath>
#include<algorithm>
#include<queue>
#include<deque>
#include<map>
#include<unordered_map>
#include<set>
#include<stack>
//#define LOCAL //提交时一定注释
#include<bits/stdc++.h>
#define VI vector<int>
#define io ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
using namespace std;
typedef long long LL;
typedef double db;
const int inf = 0x3f3f3f3f;
const LL INF = 1e18;
const int N = 1e6 + 10;
const LL mod = 998244353;
const int p = 26;inline int readint() {int x; scanf("%d", &x); return x;}LL fac[N];LL qm(LL a, LL b, LL c) {LL res = 1;while (b) {if (b & 1) res = res * a % c;a = a * a % c;b >>= 1;}return res;
}//对阶乘预处理
void f() {fac[0] = 1;fac[1] = 1;for(int i = 2; i <= N; i++) fac[i] = fac[i - 1] * i % mod;
}LL inv(LL x) {return qm(x, mod - 2, mod);
}LL C(LL n, LL m) {// LL up = 1, dn = 1;
// for(int i = 1; i <= m; i++) {// up = up * (n + 1 - i) % mod;
// dn = dn * i % mod;
// }
// return up * qm(dn, mod - 2, mod) % mod;return fac[n] * inv(fac[n - m]) % mod * inv(fac[m]) % mod;
}int main() {#ifdef LOCALfreopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endifLL n, m;scanf("%lld%lld", &n, &m);f();LL ans = 0;for(int d = 1; d <= n - 1; d++) {ans = (ans + (d * (n - d) % mod * C(m - 2 + d, d) % mod)) % mod;}printf("%lld", ans);return 0;
}
【组合数+隔板法】2021牛客寒假算法基础集训营5 B 比武招亲(上)相关推荐
- 2021牛客寒假算法基础集训营5 B.比武招亲(上)
2021牛客寒假算法基础集训营5 B.比武招亲(上) 题目链接 题目描述 众所周知,天姐姐只喜欢天下最聪明的人,为了找到这样的人,她决定比武招亲! 只见天姐姐在榜上留下了这样一道问题,谁做出来了就可以 ...
- 2021牛客寒假算法基础集训营5 B 比武招亲(上)
题目链接 题目描述 思路 选取的序列a可能的贡献有 0,1,2,3,-,n-1. 设a的贡献为d. 贡献为d的序列有 [1,-,1+d], [2,-,2+d]- (共有n-d个这样的序列) 对贡献为d ...
- 2021牛客寒假算法基础集训营5 B. 比武招亲(上)
链接 https://ac.nowcoder.com/acm/contest/9985/B 题意 给定 n , m n,m n,m,定义一种序列,构造方法如下: 在 [ 1 , n ] [1,n] [ ...
- 2021牛客寒假算法基础集训营5 B 比武招亲(上)
链接 https://ac.nowcoder.com/acm/contest/9985/B 思路 打表,得出一个7X7的表,根据行(m相同的情况下)找规律 第一行差分数列可以写成组合数形式C(n, 3 ...
- 2021牛客寒假算法基础集训营1 J 一群小青蛙呱蹦呱蹦呱
今天的比赛没打( 睡午觉去了,今天太累了 晚上来看看题 2021牛客寒假算法基础集训营1 J 一群小青蛙呱蹦呱蹦呱 题目传送门 板子题( 我们知道由唯一分解定理得,若 n=p1α1×p2α2×p3α3 ...
- 【解题报告】2021牛客寒假算法基础集训营4
[解题报告]2021牛客寒假算法基础集训营4 前面的话 A :九峰与签到题 | 模拟 (签到题) B: 武辰延的字符串 | exKMP D :温澈滢的狗狗 | 二分 E: 九峰与子序列 | d p d ...
- 2021牛客寒假算法基础集训营1
2021牛客寒假算法基础集训营1 A. 串(线性DP) B. 括号(构造) E.三棱锥之刻(几何) F. 对答案一时爽(签到) I. 限制不互素对的排列(构造) J. 一群小青蛙呱蹦呱蹦呱 A. 串( ...
- 2021牛客寒假算法基础集训营2 D.牛牛与整除分块
2021牛客寒假算法基础集训营2 D.牛牛与整除分块 题目链接 题目描述 整除分块,又称数论分块.是数论算法中的重要技巧,你可以在各种需要枚举因子的连续求和类问题中见到它的身影.如杜教筛,莫比乌斯反演 ...
- 2021牛客寒假算法基础集训营5 比武招亲(上)(组合数)
链接:https://ac.nowcoder.com/acm/contest/9985/B 来源:牛客网 题目描述 众所周知,天姐姐只喜欢天下最聪明的人,为了找到这样的人,她决定比武招亲! 只见天姐姐 ...
最新文章
- linux 内核 proc_create 函数 内幕初探
- 选择P2P平台的技巧和方法
- 吴恩达《Machine Learning》精炼笔记 10:异常检测
- 操作系统提供什么服务、如何服务?
- 【性能测试】性能需求挖掘、性能方案制定及压测场景设计之疑惑与思考(一)
- 把txt格式数据制作成xml数据
- mysql如何字符编码,如何修改MYSQL的字符编码
- 【VS开发】COM组件技术概述
- JavaBean的实用工具Lombok(省去get、set等方法)
- Java视频教程免费分享(网盘直接取)
- 华硕主板升级更新BIOS版本
- mouseover和mouseenter的区别?
- 使用Amazon SageMaker RL训练离线强化学习策略
- 数据结构—队列的C语言实现
- Intellij IDEA 神级插件
- Linux常用命令|徐奥雯编辑整理|XUAOWEN
- python小程序之七段数码读秒
- 英语口语266之每日十句口语
- 使用“git commit -m“命令时候报error
- camera接口---MIPI CSI-2接口、DVP接口和FPD-Link III LVDS、GMSL等接口对比(转)
热门文章
- 通过高德地图API实现浏览器定位[以及提高定位精度、获取详细位置信息]
- 进入大学应该做的第一件事
- 事务隔离性(Isolation)介绍
- 制作多系统架构平台镜像
- win10 系统更新服务器出错,win10系统更新出错如何解决?win10系统更新出错常见的修复方法...
- 【Chrome自动更新修复】检查更新时出错:无法启动更新检查(错误代码为 4: 0x80070005 -- system level)
- Qtime非阻塞延时和Sleep阻塞延时
- Mybatis向Oracle数据库写数据时报错:无效的列类型1111
- 移动端IM实践:实现Android版微信的智能心跳机制
- TCP的四次挥手中的等待2MSL