C. Easy

构造两个序列分别要满足 \(\sum_{i=1}^{k} a_{i} = N\) \(\sum_{i=1}^{k} b_{i} = M\)

一种方案能贡献\(\prod_{i=1}^{k} min(a_{i}, b_{i})\) 的分数 求所有方案分数的和

生成函数

对于一个序列 \(a_{0},a_{1},a_{2}\)···

定义它的生成函数为 \(G(x) = a_{0} + a_{1}x + a_{2}x^{2}\)···

生成函数有指数和系数两维信息 所以用来解决计数问题非常强大 因此生成函数的构造是比较关键的

在本题中一个序列不同的方案数 其实就是就把N划分成K个数的方案数

对于每一个数我们可以用一个生成函数\(G(x) = x+x^{2}+x^{3}\)···来表示

它的意义是 每一项其实就是一种操作 比如\(x^{2}\)表示让这一位为2(指数)的方案数为1(系数)

那么把N划分成K个数的方案数就是 \((G(x))^{k} = (x + x^{2}+x^{3}···)^{k}\) 中\(x^{N}\)的系数

如果想维护出一个序列所有方案分数的和 我们可以巧妙的构造 \((G(x))^{k} = (x + 2x^{2}+3x^{3}···)^{k}\)

它的意义是 比如\(2x^{2}\)表示让这一位为2(指数)能让这一种方案的分数\(*2\)(系数)

min的生成函数

容易想到 对于两个数我们可以构造一个生成函数\(G(x,y) = (x + x^{2} + x^{3}···)(y+y^{2}+y^{3}···)\) 用\(x^{i}y^{j}\)来表示第一个数为i 第二个数为j

我们只用了它的指数 显然还有系数可以用来维护信息 能不能用一种构造使得它的系数为\(min(i,j)\)呢

先上结论 我们可以在\(G(x,y)\)后乘上一个\(1+xy+x^{2}y^{2}\)···

理解一下 假设\(i<j\) 它实际上是提供了一个映射 让原来的\(x^{i}y^{j},x^{i-1}y^{j-1},x^{i-2}y^{j-2}···x^{1}y^{j-i+1}\)一共\(i\)项都为\(x^{i}y^{j}\)的系数做了一次贡献

所以在这个多项式里\(x^{i}y^{j}\)的系数恰好为\(min(i,j)\)

题解

综上所述 答案为\(G(x,y) = (x + x^{2} + x^{3}···)^{k}(y+y^{2}+y^{3}···)^{k}(1+xy+x^{2}y^{2}···)^{k}\)这个多项式中\(x^{N}y^{M}\)的系数

我们可以枚举最后一项中\(x^{i}y^{i}\)的指数 就可以得到第一个项中\(x\)的指数为\(N-i\) 第二项\(y\)的指数为\(M-i\)

然后分别计算它们的系数 最后一项是把i个物品分为K个可以为空的集合 前两项分别是把\(N-i\)和\(M-i\)个物品分为K个非空集合

\(ans = \sum_{0}^{min(N-K,M-K)} \binom{N-i-1}{K-1} \binom{M-i-1}{K-1} \binom{i+K-1}{i}\)

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int mod = 998244353;
const int MAXN = 1000005;
int n, m, k;
int fac[MAXN];
int ny[MAXN];
int inv[MAXN]; int C(int x, int y) {
if(x < y || y < 0 || x < 0) return 0;
return 1LL * fac[x] * inv[x - y] % mod * inv[y] % mod;
} int main() {
fac[0] = ny[0] = inv[0] = 1; ny[1] = 1;
for(int i = 1; i <= 1000000; i++) {
fac[i] = 1LL * i * fac[i - 1] % mod;
if(i > 1) ny[i] = 1LL * ny[mod % i] * (mod - mod / i) % mod;
inv[i] = 1LL * ny[i] * inv[i - 1] % mod;
} int T;
cin>>T;
while(T--) {
scanf("%d%d%d", &n, &m, &k); int ans = 0;
for(int i = 0; i <= min(n, m) - k; i++) {
int tmp = 1LL * C(k + i - 1, i) * C(n - i - 1, k - 1) % mod * C(m - i - 1, k - 1) % mod;
ans = (ans + tmp) % mod;
}
printf("%d\n", ans);
} return 0;
}

2020Nowcode多校 Round5 C. Easy的更多相关文章

  1. 2017多校Round5(hdu6085~hdu6095)

    补题进度:7/11 1001(模意义下的卷积) 题意: 给出长度<=50000的两个数组A[] B[],保证数组中的值<=50000且A[]中数字两两不同,B[]中数字两两不同 有5000 ...

  2. 2020Nowcode多校 Round9 B.Groundhog and Apple Tree

    题意 给一棵树 初始\(hp=0\) 经过一条边会掉血\(w_{i}\) 第一次到达一个点可以回血\(a_{i}\) 在一个点休息\(1s\)可以回复\(1hp\) 血不能小于\(0\) 每条边最多经 ...

  3. 2019牛客多校 Round5

    Solved:4 Rank:122 补题:8/10 A digits 2 签到 把这个数写n遍 #include <bits/stdc++.h> using namespace std; ...

  4. 2016弱校联盟十一专场10.5---As Easy As Possible(倍增)

    题目链接 https://acm.bnu.edu.cn/v3/contest_show.php?cid=8506#problem/A problem description As we know, t ...

  5. 2015弱校联盟(1) -A. Easy Math

    A. Easy Math Time Limit: 2000ms Memory Limit: 65536KB Given n integers a1,a2,-,an, check if the sum ...

  6. 湘潭校赛 Easy Wuxing

    Easy Wuxing Accepted : 25   Submit : 124 Time Limit : 1000 MS   Memory Limit : 65536 KB 题目描述 “五行”是中国 ...

  7. 2020牛客暑期多校训练营(第一场)Easy Integration

    传送门:J. Easy Integration 题意:给你n,求这个积分,最后的结果分子是记为p,分母记为q. 求(p*q-1)mod 998244353. 题解:比赛完看到巨巨说这是贝塔函数,我一搜 ...

  8. Solution -「LOCAL」「cov. 牛客多校 2020 第五场 C」Easy

    \(\mathcal{Description}\)   Link.(完全一致)   给定 \(n,m,k\),对于两个长度为 \(k\) 的满足 \(\left(\sum_{i=0}^ka_i=n\r ...

  9. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

随机推荐

  1. transmission protocol

    传输层主要定义了主机应用程序间端到端的连通性,它一般包含四项基本功能 . 将应用层发往网络层的数据分段或将网络层发往应用层的数据段合并 建立端到端的链接,主要是建立逻辑连接以传送数据流 将数据段从一台 ...

  2. 【剑指 Offer】03.1.不修改数组找出重复的数字

    找出数组中重复的数字. 在一个长度为 n + 1 的数组 nums 里的所有数字都在 1-n 的范围内.所以数组中至少有一个是重复的.请找出数组中任意一个重复的数字. 示例 1: 输入: [2, 3, ...

  3. 【Oracle】查看哪些用户被授予了DBA权限

    查看哪些用户被授予了DBA权限 select * from dba_role_privs where granted_role='DBA'; 回收权限: revoke dba from xxx;

  4. logicaldisk本地磁盘管理

    在网上搜了很多,但是基本都是一样的,差不多都是互相转载摘抄,就那么几个寥寥无几的例子,所以我冒了很大的风险,自己经过多次的测试,对这个命令有了一些新的认识!拿出来分享一下! LOGICALDISK   ...

  5. [Usaco2010 Hol]cowpol 奶牛政坛

    题目描述: 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片草地出发都可 ...

  6. 前端面试准备笔记之JavaScript(01)

    1.1 typeof 能判断哪些类型? typeof可以识别所有的值类型 typeof可以识别函数 //function typeof可以判断是否是引用类型(不可以再细分) //object 1.2 ...

  7. 支付宝沙箱环境使用(Alipay Easy SDK ) .Net示例

    新版服务端 SDK(Alipay Easy SDK)适用于 Java.C#.PHP 编程语言,对开放能力的 API 进行了更加贴近高频场景的精心设计与裁剪,简化了服务端调用方式,让开发者享受极简编程体 ...

  8. Ajax编程基础

    目录 Ajax编程基础 传统网站中存在的问题 Ajax概述 Ajax的应用场景 Ajax的运行环境 Ajax运行原理及实现 Ajax运行原理 Ajax的实现步骤 1.创建Ajax对象 2.告诉Ajax ...

  9. CentOS7.9静默安装Oracle19C软件

    CentOS7.9静默安装Oracle19C软件 Oracle发布了支持的版本.可以看到了Oracle11gR2和Oracle12C.一直到2022年就不支持patch和服务.(感慨Oracle 11 ...

  10. a.default.ERROR.httpAjax is not a function

    原因1: 使用的是jQuery的slim构建,它删除了一些东西,ajax就是其中之一. 解决方法: 在此处下载常规(压缩或非压缩)版本的jQuery并将其包含在您的项目中. 原因2: 使用其他库引起了 ...