\(\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\) 的指数,就有:

\[\min\{a,b\}x^ay^b=\sum_{i=0}^{\min\{a,b\}-1}(xy)^ix^{a-i}y^{b-i}
\]

  构造一下,有:

\[G(x,y)=\left(\sum_{i=1}^{+\infty}x^i\right)\left(\sum_{i=1}^{+\infty}y^i\right)\left(\sum_{i=0}^{+\infty}x^iy^i\right)
\]

  答案即为:

\[[x^ny^m]G^k(x,y)
\]

  枚举 \(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的更多相关文章

  1. Solution -「LOCAL」「cov. 牛客多校 2020 第三场 I」礼物

    \(\mathcal{Description}\)   给定排列 \(\{a_n\}\),求字典序第 \(K\) 大的合法排列 \(\{b_n\}\).称一个排列 \(\{p_n\}\) 合法,当且仅 ...

  2. 牛客多校对抗第6场 A Singing Contest

    [20分]标题:A.Singing Contest | 时间限制:1秒 | 内存限制:256MJigglypuff is holding a singing contest. There are 2n ...

  3. 牛客多校训练第八场C.CDMA(思维+构造)

    题目传送门 题意: 输入整数m( m∈2k ∣ k=1,2,⋯,10),构造一个由1和-1组成的m×m矩阵,要求对于任意两个不同的行的内积为0. 题解: Code: #include<bits/ ...

  4. 牛客多校训练第八场G.Gemstones(栈模拟)

    题目传送门 题意: 输入一段字符串,字符串中连续的三个相同的字符可以消去,消去后剩下的左右两段字符串拼接,求最多可消去次数. 输入:ATCCCTTG   输出:2 ATCCCTTG(消去CCC)——& ...

  5. 2019牛客多校训练第四场K.number(思维)

    题目传送门 题意: 输入一个只包含数字的字符串,求出是300的倍数的子串的个数(不同位置的0.00.000等都算,并考虑前导零的情况). sample input: 600 1230003210132 ...

  6. 2019牛客多校训练第三场H.Magic Line(思维)

    题目传送门 大致题意: 输入测试用例个数T,输入点的个数n(n为偶数),再分别输入n个不同的点的坐标,要求输出四个整数x1,y1,x2,y2,表示有一条经过点(x1,y1),(x2,y2)的直线将该二 ...

  7. 2019牛客多校训练第三场B.Crazy Binary String(思维+前缀和)

    题目传送门 大致题意: 输入整数n(1<=n<=100000),再输入由n个0或1组成的字符串,求该字符串中满足1和0个数相等的最长子串.子序列. sample input: 801001 ...

  8. 2019暑假牛客多校训练-第八场-C-CDMA(递归、水题)

    观察前3组可以推出递归规律,生成下一个类型时,每行copy自身与自身相反. 题目描述 Gromah and LZR have entered the third level. There is a b ...

  9. 2018年牛客多校寒假 第四场 F (call to your teacher) (图的连通性)

    题目链接 传送门:https://ac.nowcoder.com/acm/contest/76/F 思路: 题目的意思就是判断图的连通性可以用可达性矩阵来求,至于图的存储可以用邻接矩阵来储存,求出来可 ...

随机推荐

  1. Linux上天之路(十八)之自动化部署

    pexpect Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Pyth ...

  2. Go语言系列之包

    Go语言的包(package) 一.包介绍 包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt.os.io等. 二.定义包 我们还可以根据自己 ...

  3. java mapreduce实现网站PV分析

    原文链接: https://www.toutiao.com/i6765677128022229517/ PV 是Page Views的缩写,即页面浏览量,用户每一次对网站中的每个网页访问均被记录一次. ...

  4. Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  5. Flowable实战(七)用户和组

      在流程中,最重要的参与者是用户.流程定义了任务何时需要用户参与,什么用户可以参与.   组可以理解为我们常说的角色.   Flowable中内置了一套简单的对用户和组的支持,身份管理(IDM ID ...

  6. office 下载(免费使用

    https://otp.landian.vip/zh-cn/download.html

  7. uniapp如何生成自己的小程序码并且携带参数

    生成小程序码需要用到的参数appId  appSecret这两个参数可以再微信公众平台里面登录获取 也可以用测试号里面的获取小程序码步骤1.首先要请求官方的API`https://api.weixin ...

  8. Windows和Linux关闭占用端口

    关闭端口的方式有很多种,但是常用的就是这种比较来的快一点 如果通过以下方式解决不了,可以通过关闭服务来解决 Windows 1.查看端口占用的进程 netstat -ano | findstr 800 ...

  9. WebGPU相关的资源学习和社区

    我在网上搜寻了很多关于WebGPU相关的资料: #我觉得首先在B站上看到的徐博士免费教程非常好,讲解详细,并且评论回复比较快,都会有回应,徐博士B站网址:https://space.bilibili. ...

  10. echart的x轴或y轴区间标签如何从大到小排列

    1.有时候我们做echart时,从后台接收返回回来的数据,没有按顺序排列,这里我遇到的是区间的值,看图 我这里是处理好了的,一开始,50-100这个区间在数组的最后一列,也就是在150-200后面的这 ...