[洛谷P4091][HEOI2016/TJOI2016]求和
题目大意:给你$n(n\leqslant10^5)$,求:
$$
\sum\limits_{i=0}^n\sum\limits_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}\times2^j\times j!
$$
$\begin{Bmatrix}n\\m\end{Bmatrix}$表示第二类斯特林数,递推公式为$\begin{Bmatrix}n\\m\end{Bmatrix}=m\begin{Bmatrix}n-1\\m\end{Bmatrix}+\begin{Bmatrix}n-1\\m-1\end{Bmatrix}(1\leqslant m\leqslant n-1)$,边界为$\begin{Bmatrix}n\\n\end{Bmatrix}=1(0\leqslant n),\begin{Bmatrix}n\\0\end{Bmatrix}=0(1\leqslant n)$
题解:第二类斯特林数表示把$n$个不相同的球放在$m$个相同的盒子里,没有空的盒子。可以枚举至少有几个空的盒子来容斥。
$$
\begin{Bmatrix}n\\m\end{Bmatrix}=\dfrac1{m!}\sum\limits_{i=0}^m\binom mi(-1)^i(m-i)^n
$$
直接带到原式子中
$$
\begin{align*}
&\sum\limits_{i=0}^n\sum\limits_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}\times2^j\times j!\\
=&\sum\limits_{i=0}^n\sum\limits_{j=0}^i\dfrac1{j!}\sum\limits_{k=0}^j\binom jk(-1)^k(j-k)^i\times2^j\times j!\\
=&\sum\limits_{i=0}^n\sum\limits_{j=0}^i\sum\limits_{k=0}^j\dfrac{j!}{k!(j-k)!}(-1)^k(j-k)^i\times2^j\\
=&\sum\limits_{i=0}^n\sum\limits_{j=0}^i2^jj!\sum\limits_{k=0}^j\dfrac{1}{k!(j-k)!}(-1)^k(j-k)^i\\
\end{align*}
$$
发现若$\begin{Bmatrix}n\\m\end{Bmatrix}$中$m>n$,值为$0$。可以把$j$的上界变为$n$
$$
\begin{align*}
=&\sum\limits_{i=0}^n\sum\limits_{j=0}^n2^jj!\sum\limits_{k=0}^j\dfrac{1}{k!(j-k)!}(-1)^k(j-k)^i\\
=&\sum\limits_{j=0}^n2^jj!\sum\limits_{k=0}^j\dfrac{(-1)^k}{k!}\dfrac{\sum\limits_{i=0}^n(j-k)^i}{(j-k)!}\\
=&\sum\limits_{j=0}^n2^jj!\sum\limits_{k=0}^j\dfrac{(-1)^k}{k!}\dfrac{(j-k)^{n+1}-1}{(j-k-1)(j-k)!}
\end{align*}
$$
令$f_i=\dfrac{(-1)^i}{i!},g_i=\dfrac{i^{n+1}-1}{(i-1)i!}$
$$
\begin{align*}
=&\sum\limits_{j=0}^n2^jj!\;[j](f*g)
\end{align*}
$$
$FFT$一下就好了
卡点:无
C++ Code:
#include <algorithm>
#include <cstdio>
#define maxn 262144
const int mod = 998244353;
inline void reduce(int &x) { x += x >> 31 & mod; } namespace Math {
inline int pw(int base, int p) {
static int res;
for (res = 1; p; p >>= 1, base = static_cast<long long> (base) * base % mod) if (p & 1) res = static_cast<long long> (res) * base % mod;
return res;
}
inline int inv(int x) { return pw(x, mod - 2); }
} namespace Poly {
#define N maxn
int lim, s, rev[N];
int Wn[N | 1];
inline void init(const int n) {
lim = 1, s = -1; while (lim < n) lim <<= 1, ++s;
for (int i = 1; i < lim; ++i) rev[i] = rev[i >> 1] >> 1 | (i & 1) << s;
const int t = Math::pw(3, (mod - 1) / lim);
*Wn = 1; for (register int *i = Wn; i != Wn + lim; ++i) *(i + 1) = static_cast<long long> (*i) * t % mod;
}
inline void FFT(int *A, const int op = 1) {
for (register int i = 1; i < lim; ++i) if (i < rev[i]) std::swap(A[i], A[rev[i]]);
for (register int mid = 1; mid < lim; mid <<= 1) {
const int t = lim / mid >> 1;
for (register int i = 0; i < lim; i += mid << 1)
for (register int j = 0; j < mid; ++j) {
const int X = A[i + j], Y = static_cast<long long> (A[i + j + mid]) * Wn[t * j] % mod;
reduce(A[i + j] += Y - mod), reduce(A[i + j + mid] = X - Y);
}
}
if (!op) {
const int ilim = Math::inv(lim);
for (register int *i = A; i != A + lim; ++i) *i = static_cast<long long> (*i) * ilim % mod;
std::reverse(A + 1, A + lim);
}
} void Mul(int *A, int *B, int n) {
init(n << 1);
FFT(A), FFT(B);
for (int i = 0; i < lim; ++i) A[i] = static_cast<long long> (A[i]) * B[i] % mod;
FFT(A, 0);
}
#undef N
} int n;
int f[maxn], g[maxn];
int fac[maxn], inv[maxn], pinv[maxn];
int main() {
scanf("%d", &n);
fac[0] = fac[1] = inv[0] = inv[1] = pinv[0] = pinv[1] = 1;
for (int i = 2; i <= n; ++i) {
fac[i] = static_cast<long long> (fac[i - 1]) * i % mod;
inv[i] = static_cast<long long> (mod - mod / i) * inv[mod % i] % mod;
pinv[i] = static_cast<long long> (pinv[i - 1]) * inv[i] % mod;
}
g[0] = 1, g[1] = n + 1;
for (int i = 2; i <= n; ++i) g[i] = static_cast<long long> (Math::pw(i, n + 1) - 1) * inv[i - 1] % mod * pinv[i] % mod;
for (int i = 0; i <= n; ++i) f[i] = static_cast<long long> ((i & 1) ? mod - 1 : 1) * pinv[i] % mod;
Poly::Mul(f, g, n + 1); for (int i = 0; i <= n; ++i) f[i] = static_cast<long long> (f[i]) * fac[i] % mod * Math::pw(2, i) % mod;
int ans = 0;
for (int i = 0; i <= n; ++i) reduce(ans += f[i] - mod);
printf("%d\n", ans);
return 0;
}
[洛谷P4091][HEOI2016/TJOI2016]求和的更多相关文章
- 洛谷 P4091 [HEOI2016/TJOI2016]求和 解题报告
P4091 [HEOI2016/TJOI2016]求和 题目描述 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: \[ f(n)=\sum_{i=0}^n\ ...
- 【题解】P4091 [HEOI2016/TJOI2016]求和
[题解]P4091 [HEOI2016/TJOI2016]求和 [P4091 HEOI2016/TJOI2016]求和 可以知道\(i,j\)从\(0\)开始是可以的,因为这个时候等于\(0\).这种 ...
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP
洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...
- BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治
原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告
P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...
- 洛谷 P2824 [HEOI2016/TJOI2016]排序 解题报告
P2824 [HEOI2016/TJOI2016]排序 题意: 有一个长度为\(n\)的1-n的排列\(m\)次操作 \((0,l,r)\)表示序列从\(l\)到\(r\)降序 \((1,l,r)\) ...
- BZOJ 4555 Luogu P4091 [HEOI2016/TJOI2016]求和 (第二类斯特林数)
题目链接 (luogu) https://www.luogu.org/problem/P4091 (bzoj) https://www.lydsy.com/JudgeOnline/problem.ph ...
- P4091 [HEOI2016/TJOI2016]求和(第二类斯特林数+NTT)
传送门 首先,因为在\(j>i\)的时候有\(S(i,j)=0\),所以原式可以写成\[Ans=\sum_{i=0}^n\sum_{j=0}^nS(i,j)\times 2^j\times j! ...
- 【题解】Luogu P4091 [HEOI2016/TJOI2016]求和
原题传送门 \[\begin{aligned} a n s &=\sum_{i=0}^{n} \sum_{j=0}^{i}\left\{\begin{array}{c}{i} \\ {j}\e ...
随机推荐
- Frida----基本代码
代码来自官网:https://www.frida.re/docs/examples/android/ import frida, sys def on_message(message, data): ...
- python迭代器的内置函数
1.迭代器: 内置函数: (1)iter() -__iter__() (2)next() -__next__() 2.迭代器的举例; 对于Fibs数列,我们对其进行 限量输出: 实现代码如下: cla ...
- Java生成唯一ID
这里我用的是Java提供的java.util.UUID类来产生随机字串,UUID码是什么我就不再赘述,能满足我们的需求就可以. 下面是java代码: import java.util.UUID; pu ...
- MATLAB复制图片时边框大的问题
当使用MATLAB画图时,需要将图片复制到word中,会发现图片有一个白色的边框,在论文的排版中是一个影响美观的问题 例如: >> x = 0:10; >> y = sin(x ...
- linux上网络问题
一.网络连接失败,不能访问 1.现象描述 network 服务不能启动, ping不通, Device not managed by NetworkManager or unavailable 2.n ...
- 提高JetBrains软件的性能
在Java开发中,我用的开发工具是Idea,它是JetBrains公司旗下的产品. 电脑内存较大,但是Idea加载的慢,我们可以通过 \bin 下的 idea64.exe.vmoptions 和 id ...
- Docker持久化存储与数据共享
一.Docker持久化数据的方案 基于本地文件系统的Volume:可以在执行docker create或docker run时,通过-v参数将主机的目录作为容器的数据卷.这部分功能便是基于本地文件系统 ...
- Qt tableWidget 空单元格 获取选中行行号
bool focus = tableWidget->isItemSelected(tableWidget->currentItem()); // 判断是否选中一行 Int row1 = t ...
- SQL-Server collation, what is it and how to change db/column collation
The thing about collations is that although database have it's own collation, every table, and every ...
- django之基本配置
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...