HDU-6397(2018 Multi-University Training Contest 8) Character Encoding(生成函数+组合数学)
题意
从$0$到$n-1$的数字里可重复的取至多$m$个数的和等于$k$的方案数。
思路
显然的生成函数的思路为构造
$(1+x+x^{2}+...+x^{n-1})^{m}$
那么$x^{k}$的系数即答案。等比数列求和后得到
$ \frac {(1-x^n)^m} {(1-x)^m}$
对分子二项式展开得到
$(1-x^n)^m = \sum_{i=0}^m C_m^{i}(-1)^i * x^{n*i}$
对分母根据泰勒展开得到
$(1-x)^{-m} = \sum_{j = 0}^{\infty }C_{m+j-1}^{j}x^{j}$
代码
#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl; using namespace std; const int N = 200000 + 5;
const int mod = 998244353;
typedef long long LL; int t, n, m, k;
LL fac[N], invf[N]; LL add(LL a, LL b) {
LL res = a + b;
if(res < 0) res += mod;
return res % mod;
} LL mul(LL a, LL b) {
LL res = a * b;
if(res < 0) res += mod;
return res % mod;
} LL qpow(LL a, LL b) {
LL res = 1;
while(b) {
if(b & 1) res = mul(res, a);
a = mul(a, a);
b /= 2;
}
return res;
} void init() {
fac[0] = fac[1] = 1;
for(int i = 2; i < N; i++) fac[i] = mul(fac[i - 1], 1LL * i);
invf[N - 1] = qpow(fac[N - 1], mod - 2);
for(int i = N - 2; i >= 0; i--) invf[i] = mul(invf[i + 1], 1LL * i + 1);
} LL C(int n, int m) {
if(n < 0 || m < 0 || n < m) return 0;
return mul(fac[n], mul(invf[m], invf[n - m]));
} int main() {
init();
scanf("%d", &t);
while(t--) {
LL ans = 0;
scanf("%d%d%d", &n, &m, &k);
for(LL i = 0; k - n * i >= 0; i++) {
LL j = k - n * i;
LL tmp = (i % 2 == 0 ? 1 : -1);
ans = add(ans, mul(tmp, mul(C(m, i), C(m + j - 1, m - 1))));
}
printf("%lld\n", ans % mod);
}
return 0;
}
HDU-6397(2018 Multi-University Training Contest 8) Character Encoding(生成函数+组合数学)的更多相关文章
- hdu 4915 Parenthese sequence--2014 Multi-University Training Contest 5
主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4915 Parenthese sequence Time Limit: 2000/1000 MS (Ja ...
- hdu 4902 Nice boat--2014 Multi-University Training Contest 4
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=4902 Nice boat Time Limit: 30000/15000 MS (Java/Othe ...
- hdu 4925 Apple Tree--2014 Multi-University Training Contest 6
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4925 Apple Tree Time Limit: 2000/1000 MS (Java/Others ...
- HDU校赛 | 2019 Multi-University Training Contest 6
2019 Multi-University Training Contest 6 http://acm.hdu.edu.cn/contests/contest_show.php?cid=853 100 ...
- HDU校赛 | 2019 Multi-University Training Contest 5
2019 Multi-University Training Contest 5 http://acm.hdu.edu.cn/contests/contest_show.php?cid=852 100 ...
- HDU校赛 | 2019 Multi-University Training Contest 4
2019 Multi-University Training Contest 4 http://acm.hdu.edu.cn/contests/contest_show.php?cid=851 100 ...
- HDU校赛 | 2019 Multi-University Training Contest 3
2019 Multi-University Training Contest 3 http://acm.hdu.edu.cn/contests/contest_show.php?cid=850 100 ...
- HDU校赛 | 2019 Multi-University Training Contest 2
2019 Multi-University Training Contest 2 http://acm.hdu.edu.cn/contests/contest_show.php?cid=849 100 ...
- HDU校赛 | 2019 Multi-University Training Contest 1
2019 Multi-University Training Contest 1 http://acm.hdu.edu.cn/contests/contest_show.php?cid=848 100 ...
随机推荐
- iOS中Safari浏览器select下拉列表文字太长被截断的处理方法
网页中的select下拉列表,文字太长的话在iOS的Safari浏览器里会被自动截断,显示成下面这种: 安卓版的浏览器则没有这个问题. 如何让下拉列表中的文字在iOS的Safari浏览器里显示完整呢? ...
- 一个简易的kmp教学并给出java实现
简单介绍一下问题 给定source字符串,找出target字符串出现的首位 例如 source 为“abddabddabc” target 为 “abddabc” 从第一位开始比较 |a b d ...
- 阿狸V任务页面爬取数据解析
需求: 爬取:https://v.taobao.com/v/content/video 所有主播详情页信息 首页分析 分析可以得知数据是通过ajax请求获取的. 分析请求头 详情页分析 详情页和详情页 ...
- gVim编辑器 模板篇
上文介绍了gVim的常用操作,这次总结一下我自己常用的模板. 安装和配置好gVim后,在Program Files (x86)\Vim目录下有个“_vimrc”文件,双击选择gVim软件打开,在里面添 ...
- 在Winform开发框架中对附件文件进行集中归档处理
在我们Winform开发中,往往需要涉及到附件的统一管理,因此我倾向于把它们独立出来作为一个附件管理模块,这样各个模块都可以使用这个附件管理模块,更好的实现模块重用的目的.在涉及附件管理的场景中,一个 ...
- golang学习和使用经验总结
学习网址 https://studygolang.com/pkgdoc go标准库网站 https://blog.csdn.net/sanxiaxugang/article/details/60324 ...
- 关于Math.round()方法
先上结论: 1.参数的小数点后第一位<5,运算结果为参数整数部分. 2.参数的小数点后第一位>5,运算结果为参数整数部分绝对值+1,符号(+ or -)不变. 3.参数的小数点后第一位=5 ...
- 石家庄地铁系统开发(java web版)(二)
两种方法: 一,自己写数据库,自己写算法实现 二,调用已有软件的API(百度,高德)
- keras03 Aotuencoder 非监督学习 第一个自编码程序
# keras# Autoencoder 自编码非监督学习# keras的函数Model结构 (非序列化Sequential)# 训练模型# mnist数据集# 聚类 https://www.bili ...
- FreeMarker 入门
目录 FreeMarker是什么 为什么要学习FreeMarker FreeMarker相关站点