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. 知识图谱和neo4j的基本操作

    一.知识图谱的简介 1.知识图谱是什么 知识图谱本质上是语义网络(Semantic Network)的知识库 可以理解为一个关系图网络. 2.什么是图 图(Graph)是由节点(Vertex)和边(E ...

  2. centos 安装 部署 gitlab github

    https://www.cnblogs.com/wenwei-blog/p/5861450.html 我这里使用的是centos 7 64bit,我试过centos 6也是可以的! 1. 安装依赖软件 ...

  3. Macbook 安装Windows的完美教程

    [原文](http://www.melodydance.top/mac-win.html) 1. 背景 Windows相对于Mac市场占有率更高,对很多人来说Windows使用起来更方便,以至于很多人 ...

  4. zabbix_server上的问题

    不要写成127.0.0.1,要不然一直包zabbix agent没有启动.

  5. CTFshow-萌新赛逆向_flag白给

    查看题目信息 下载后得到一个flag.exe文件,进行测试 使用PEiD查壳 发现一个upx的壳 使用命令进行解壳 upx -d 拿到一个无壳的程序 放进OD打开,查找关键词 发现信息 成功拿到序列号 ...

  6. OLE NumberFormat

    设置单元格的数字格式, $3.00 想搞出这样的格式,在VBA里的格式定义如下 $#,##0.00;-$#,##0.00 可是在abap里,就是不行.最后尝试了很多次,原来在在$前面加\变成\$#,# ...

  7. 关于Mysql数据库建库字符集utf8mb4下,排序规则utf8mb4_bin和utf8mb4_general_ci选择造成的查询匹配大小写问题

    场景描述: 项目采用了分库模式进行不同业务的开发,在共有的功能模块进行设计的时候采用主从库,或者各分库之中存在同样的库表结构,在使用过程中做库表同步的时候一定要保证库表所在的数据库的字符集和编码格式是 ...

  8. 【JeecgBoot】关于 jeecg-boot 的项目理解、使用心得和改进建议

    工欲善其事,必先利其器. 脚手架选型 一年前,我接到为团队落地一个快速开发脚手架的任务. 在月底这节骨眼上,时间紧,任务急,有想自己撸一个脚手架的人都赶紧把这想法收起来吧!这劳民又伤身的事咱肯定是不能 ...

  9. C# socket 阻止模式与非阻止模式应用实例

    问题概述 最近在处理一些TCP客户端的项目,服务端是C语言开发的socket. 实际项目开始的时候使用默认的阻塞模式并未发现异常.代码如下 1 public class SocketService 2 ...

  10. JMeter性能测试9:阿里云服务器压测

    第一步准备好jmeter脚本 第二步 将本地的jmeter脚本上传到阿里云进行验证 检验阿里云的jmeter是否能正常运行 将本地的脚本上传到阿里云使用xshell进入到该目录下 使用命令运行刚才上传 ...