Solution -「LOCAL」「cov. 牛客多校 2020 第五场 C」Easy
\(\mathcal{Description}\)
Link.(完全一致)
给定 \(n,m,k\),对于两个长度为 \(k\) 的满足 \(\left(\sum_{i=0}^ka_i=n\right)\land\left(\sum_{i=1}^kb_i=m\right)\) 的正整数序列对 \(\{a_k\},\{b_k\}\),其权值为 \(\prod_{i=1}^k\min\{a_i,b_i\}\)。求所有序列对的权值之和,对 \(998244353\) 取模。
\(n,m,k\le10^6\)。
\(\mathcal{Solution}\)
我们尝试寻找 \([x^ay^b]G(x,y)=\min\{a,b\}~(a,b>0)\) 中的 \(\text{OGF}\) \(G(x,y)\)。由于 \(x^ay^b=(xy)^{\min\{a,b\}}x^{a-\min\{a,b\}}y^{b-\min\{a,b\}}\),相当于要数出 \(x^ay^b\) 里 \(xy\) 的个数。枚举 \(xy\) 的指数,就有:
\]
构造一下,有:
\]
答案即为:
\]
枚举 \(xy\) 的指数,三项的贡献均可以用隔板法算出来,故单组 \(\mathcal O(n)\) 得解。
\(\mathcal{Code}\)
#include <cstdio>
const int MAXN = 2e6, MOD = 998244353;
int n, m, K, fac[MAXN + 5], ifac[MAXN + 5];
inline int qkpow ( int a, int b, const int p = MOD ) {
int ret = 1;
for ( ; b; a = 1ll * a * a % p, b >>= 1 ) ret = 1ll * ret * ( b & 1 ? a : 1 ) % p;
return ret;
}
inline void init () {
fac[0] = 1;
for ( int i = 1; i <= MAXN; ++ i ) fac[i] = 1ll * i * fac[i - 1] % MOD;
ifac[MAXN] = qkpow ( fac[MAXN], MOD - 2 );
for ( int i = MAXN - 1; ~i; -- i ) ifac[i] = ( i + 1ll ) * ifac[i + 1] % MOD;
}
inline int comb ( const int n, const int m ) {
return n < m ? 0 : 1ll * fac[n] * ifac[m] % MOD * ifac[n - m] % MOD;
}
int main () {
// freopen ( "easy.in", "r", stdin );
// freopen ( "easy.out", "w", stdout );
init (); int T;
for ( scanf ( "%d", &T ); T --; ) {
scanf ( "%d %d %d", &n, &m, &K );
int ans = 0, up = n < m ? n : m;
for ( int i = 0; i <= up; ++ i ) {
ans = ( ans + 1ll * comb ( i + K - 1, K - 1 ) * comb ( n - i - 1, K - 1 ) % MOD
* comb ( m - i - 1, K - 1 ) ) % MOD;
}
printf ( "%d\n", ans );
}
return 0;
}
\(\mathcal{Details}\)
直接丢构造富有数学的美感。
Solution -「LOCAL」「cov. 牛客多校 2020 第五场 C」Easy的更多相关文章
- Solution -「LOCAL」「cov. 牛客多校 2020 第三场 I」礼物
\(\mathcal{Description}\) 给定排列 \(\{a_n\}\),求字典序第 \(K\) 大的合法排列 \(\{b_n\}\).称一个排列 \(\{p_n\}\) 合法,当且仅 ...
- 牛客多校对抗第6场 A Singing Contest
[20分]标题:A.Singing Contest | 时间限制:1秒 | 内存限制:256MJigglypuff is holding a singing contest. There are 2n ...
- 牛客多校训练第八场C.CDMA(思维+构造)
题目传送门 题意: 输入整数m( m∈2k ∣ k=1,2,⋯,10),构造一个由1和-1组成的m×m矩阵,要求对于任意两个不同的行的内积为0. 题解: Code: #include<bits/ ...
- 牛客多校训练第八场G.Gemstones(栈模拟)
题目传送门 题意: 输入一段字符串,字符串中连续的三个相同的字符可以消去,消去后剩下的左右两段字符串拼接,求最多可消去次数. 输入:ATCCCTTG 输出:2 ATCCCTTG(消去CCC)——& ...
- 2019牛客多校训练第四场K.number(思维)
题目传送门 题意: 输入一个只包含数字的字符串,求出是300的倍数的子串的个数(不同位置的0.00.000等都算,并考虑前导零的情况). sample input: 600 1230003210132 ...
- 2019牛客多校训练第三场H.Magic Line(思维)
题目传送门 大致题意: 输入测试用例个数T,输入点的个数n(n为偶数),再分别输入n个不同的点的坐标,要求输出四个整数x1,y1,x2,y2,表示有一条经过点(x1,y1),(x2,y2)的直线将该二 ...
- 2019牛客多校训练第三场B.Crazy Binary String(思维+前缀和)
题目传送门 大致题意: 输入整数n(1<=n<=100000),再输入由n个0或1组成的字符串,求该字符串中满足1和0个数相等的最长子串.子序列. sample input: 801001 ...
- 2019暑假牛客多校训练-第八场-C-CDMA(递归、水题)
观察前3组可以推出递归规律,生成下一个类型时,每行copy自身与自身相反. 题目描述 Gromah and LZR have entered the third level. There is a b ...
- 2018年牛客多校寒假 第四场 F (call to your teacher) (图的连通性)
题目链接 传送门:https://ac.nowcoder.com/acm/contest/76/F 思路: 题目的意思就是判断图的连通性可以用可达性矩阵来求,至于图的存储可以用邻接矩阵来储存,求出来可 ...
随机推荐
- Linux上天之路(十八)之自动化部署
pexpect Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Pyth ...
- Go语言系列之包
Go语言的包(package) 一.包介绍 包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt.os.io等. 二.定义包 我们还可以根据自己 ...
- java mapreduce实现网站PV分析
原文链接: https://www.toutiao.com/i6765677128022229517/ PV 是Page Views的缩写,即页面浏览量,用户每一次对网站中的每个网页访问均被记录一次. ...
- Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401开发
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- Flowable实战(七)用户和组
在流程中,最重要的参与者是用户.流程定义了任务何时需要用户参与,什么用户可以参与. 组可以理解为我们常说的角色. Flowable中内置了一套简单的对用户和组的支持,身份管理(IDM ID ...
- office 下载(免费使用
https://otp.landian.vip/zh-cn/download.html
- uniapp如何生成自己的小程序码并且携带参数
生成小程序码需要用到的参数appId appSecret这两个参数可以再微信公众平台里面登录获取 也可以用测试号里面的获取小程序码步骤1.首先要请求官方的API`https://api.weixin ...
- Windows和Linux关闭占用端口
关闭端口的方式有很多种,但是常用的就是这种比较来的快一点 如果通过以下方式解决不了,可以通过关闭服务来解决 Windows 1.查看端口占用的进程 netstat -ano | findstr 800 ...
- WebGPU相关的资源学习和社区
我在网上搜寻了很多关于WebGPU相关的资料: #我觉得首先在B站上看到的徐博士免费教程非常好,讲解详细,并且评论回复比较快,都会有回应,徐博士B站网址:https://space.bilibili. ...
- echart的x轴或y轴区间标签如何从大到小排列
1.有时候我们做echart时,从后台接收返回回来的数据,没有按顺序排列,这里我遇到的是区间的值,看图 我这里是处理好了的,一开始,50-100这个区间在数组的最后一列,也就是在150-200后面的这 ...