2020Nowcode多校 Round5 C. Easy
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的更多相关文章
- 2017多校Round5(hdu6085~hdu6095)
补题进度:7/11 1001(模意义下的卷积) 题意: 给出长度<=50000的两个数组A[] B[],保证数组中的值<=50000且A[]中数字两两不同,B[]中数字两两不同 有5000 ...
- 2020Nowcode多校 Round9 B.Groundhog and Apple Tree
题意 给一棵树 初始\(hp=0\) 经过一条边会掉血\(w_{i}\) 第一次到达一个点可以回血\(a_{i}\) 在一个点休息\(1s\)可以回复\(1hp\) 血不能小于\(0\) 每条边最多经 ...
- 2019牛客多校 Round5
Solved:4 Rank:122 补题:8/10 A digits 2 签到 把这个数写n遍 #include <bits/stdc++.h> using namespace std; ...
- 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 ...
- 2015弱校联盟(1) -A. Easy Math
A. Easy Math Time Limit: 2000ms Memory Limit: 65536KB Given n integers a1,a2,-,an, check if the sum ...
- 湘潭校赛 Easy Wuxing
Easy Wuxing Accepted : 25 Submit : 124 Time Limit : 1000 MS Memory Limit : 65536 KB 题目描述 “五行”是中国 ...
- 2020牛客暑期多校训练营(第一场)Easy Integration
传送门:J. Easy Integration 题意:给你n,求这个积分,最后的结果分子是记为p,分母记为q. 求(p*q-1)mod 998244353. 题解:比赛完看到巨巨说这是贝塔函数,我一搜 ...
- Solution -「LOCAL」「cov. 牛客多校 2020 第五场 C」Easy
\(\mathcal{Description}\) Link.(完全一致) 给定 \(n,m,k\),对于两个长度为 \(k\) 的满足 \(\left(\sum_{i=0}^ka_i=n\r ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
随机推荐
- 关于es6 let var const 以及Symbol的总结
```javascript //es6新增块级作用域.声明变量用关键字let const , // es5中只有函数作用域和全局作用域,声明变量用关键字var // let 和const 声明的变量 ...
- VsCode通过SSH连接远程服务器开发
前言 nil 正文 安装插件 安装VsCode官方插件 Remote - SSH Remote - SSH: Editing Configuration Files WSL(远程桌面连接需要Remot ...
- 010_MySQL
目录 初识MySQL 为什么学习数据库 什么是数据库 数据库分类 MySQL简介 Windows安装MySQL 安装建议 软件下载 安装步骤 安装SQLyog 下载安装 连接数据库 简单操作 命令行连 ...
- 【JavaWeb】Filter 过滤器
Filter 过滤器 简介 Filter 过滤器是 JavaWeb 三大组件之一 Filter 过滤器是 JavaEE 的规范,也就是接口 Filter 过滤器的作用是 拦截请求,过滤响应 拦截请求的 ...
- C语言实现蛇形矩阵
今天大一考试C语言的时候看见了这道题,下面是我转载的一个大佬的博客,自认为分析的很清楚,特来分享一下. **原文地址: https://blog.csdn.net/jack22333/article/ ...
- python作业完成简单的文件操作
题目 请创建以学号命名的目录,在该目录中创建名称为file1.txt的文件,并将自己的个人信息(序号.姓名以及班级)等写入该文件:然后并读取文件中的内容到屏幕上:接着重新命名该文件为file2.txt ...
- 【JS学习】var let const声明变量的异同点
[JS学习]var let const声明变量的异同点 前言: 本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 总述 ...
- 八:架构,搭建,WAF
WAF防护分析 什么是WAF应用 如何快速识别WAF 识别WAF对于安全测试的意义 CMS识别技术 源码获取技术 架构信息获取 站点搭建分析 搭建习惯-目录型站点 sti.blcu-bbs 目录型站点 ...
- 【Web】CSS中的浮动float
CSS中的float 文章目录 CSS中的float 1.float浮动属性 2.float文字环绕图片 3.float浮动的真正原因以及副作用分析 4.清除浮动的四种解决方法 5.实际应用 导航效果 ...
- 映泰主板H100系列安装win7的各种坑
自100系列主板发布以来,windows7好像就被遗弃一样,原因就在于安装win7的时候,会出现USB设备无法使用导致无法安装的问题.主要在于Win7系统没有整合USB的XHCI驱动,而100系列芯片 ...