题意

从$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(生成函数+组合数学)的更多相关文章

  1. 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 ...

  2. 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 ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. LinuxMint(Ubuntu)安装文泉驿家族黑体字

    文泉驿黑体字家族在Ubuntu上很有用,可以解决系统字体发虚的问题. 通过下面的三条命令安装: sudo apt-get install ttf-wqy-microhei #文泉驿-微米黑 sudo ...

  2. vue typescript ui库

    https://blog.csdn.net/phj_88/article/details/81302043 vuetifyjs

  3. Luogu4655 [CEOI2017]Building Bridges

    Luogu4655 [CEOI2017]Building Bridges 有 \(n\) 根柱子依次排列,每根柱子都有一个高度.第 \(i\) 根柱子的高度为 \(h_i\) . 现在想要建造若干座桥 ...

  4. dump解析入门-用VS解析dump文件进行排障

    突然有一天部署在服务器的一个应用挂掉了,没办法只能进入服务器打开 [事件查看器]查看下,好不容易找到了打开后一脸懵逼 事件查看器查到的内容根本对我们排障没有任何作用. 在这个时候如果有对应的dump文 ...

  5. linq中如何在join中指定多个条件

    public ActionResult Edit(int id) { using (DataContext db = new DataContext(ConfigurationManager.Conn ...

  6. Generetor函数与线程之间的思考

    在解析这个问题之前,首先,我们来了解一下es6标准里新增解决异步的两种规范 Promise与Generetor Promise 其实Promise的本质 还是基于js程式的回调处理----这一点看它的 ...

  7. 我的工具:Ping工具

    C# Ping工具 通过该工具可以多个地点Ping服务器以检测服务器响应速度,同时也可以测试网站的响应速度,解析时间,服务器连接时间,下载速度 工具下载地址:https://download.csdn ...

  8. Spring 完成自动注入(autowire)

    目录 两个测试类 普通方式手动注入 普通方式注入的缺点 自动注入的介绍 配置自动注入的方式 配置全局自动注入 局部单独配置 利用注解实现自动注入 两个测试类 package cn.ganlixin.p ...

  9. this直接加在函数或者是 “原型”对象的区别

    如果加在函数上,可以用函数直接调用,如果是加在原型对象时,那就的创建新对象,才能使用,最重要的是影响继承 直接加在函数上的,不能被新对象继承

  10. C/C++音视频库ffmpeg的数据包AVPacket分析

    ffmpeg下载地址 http://www.ffmpeg.club/ AVPacket是ffmpeg用来存放编码后的视频帧数据,我们来分析一下这个结构体,先贴出ffmpeg3.2中AVPacket声明 ...