题目

\(S(i,j)\)表示第二类斯特林数,求:
\[
f(n)=\sum _{i=0}^n\sum _{j=0}^iS(i,j)*2^j*j!
\]

分析

公式推理很简单,关键是用到了第二类斯特林数的通项公式和组合数展开的方法。
\[
\begin{aligned}
f(n)&=\sum _{i=0}^n\sum _{j=0}^iS(i,j)*2^j*j! \\
&=\sum _{i=0}^n\sum _{j=0}^n \frac{1}{j!}\sum _{k=0}^j (-1)^kC_j^k(j-k)^i*2^j*j! \\
&=\sum _{j=0}^n \frac{1}{j!}*2^j*j!\sum _{j=0}^n\sum _{k=0}^j (-1)^k \frac{j!}{k!(j-k)!} (j-k)^i \\
&=\sum _{j=0}^n 2^j*j!\sum _{k=0}^j\frac{(-1)^k}{k!}\sum _{i=0}^n\frac{(j-k)^i}{(j-k)!} \\
&=\sum _{j=0}^n 2^j*j!\sum _{k=0}^j\frac{(-1)^k}{k!}\frac{(j-k)^{n+1}-1}{(j-k)!(j-k-1)} \\
\end{aligned}
\]
令:
\[
\begin{aligned}
B(x)=\frac{(-1)^x}{x!} \\
C(x)=\frac{x^{n+1}-1}{x!(x-1)}
\end{aligned}
\]
则有:
\[
\begin{aligned}
f(n)=\sum _{j=0}^n 2^j*j!\sum _{k=0}^jB(k)C(k-j)
\end{aligned}
\]
一个卷积的形式,直接用NTT求解即可。这里要注意的是,\(C(0)=1\),因为我们在这里定义\(0^0=1\)。

代码

NTT写起来很简单,但有几个地方容易错。一定要注意把\(n\)化成整二进制的时候,\(M\)要大于\(2n\),尽管\(n\)可能本身是\(2\)的整数次幂。例如\(n=1\),这时\(M\)不能仅仅取到\(2\),而要取到\(4\)。
``` c++

include

include

include

using namespace std;
typedef long long giant;
const giant q=998244353;
const giant g=3;
const giant ig=332748118;
giant read() {
giant x=0,f=1;
char c=getchar();
for (;!isdigit(c);c=getchar()) if (c=='-') f=-1;
for (;isdigit(c);c=getchar()) x=x10+c-'0';
return x
f;
}
const giant maxn=(1<<18)+1;
const giant maxj=19;
giant a[maxn],b[maxn],c[maxn],M,xj,f[maxn],wn[maxj][2];
giant mi(giant x,giant y) {
giant ret=1;
while (y) {
if (y&1) (ret=x)%=q;
y>>=1,(x
=x)%=q;
}
return ret;
}

bzoj4555-求和的更多相关文章

  1. bzoj4555: 求和sum 快速傅立叶变换

    题目大意 给定\(S(n,m)\)表示第二类斯特林数,定义函数\(f(n)\) \[f(n) = \sum_{i=0}^n\sum_{j=0}^iS(i,j)*2^j*(j!)\] 给定正整数\(n, ...

  2. [HEOI2016/TJOI2016][bzoj4555] 求和 [斯特林数+NTT]

    题面 传送门 思路 首先,我们发现这个式子中大部分的项都和$j$有关(尤其是后面的$2^j\ast j!$),所以我们更换一下枚举方式,把这道题的枚举方式变成先$j$再$i$ $f(n)=\sum_{ ...

  3. BZOJ4555求和(cdq分治+NTT)

    题意: 输出f(n)对998244353(7 × 17 × 223 + 1)取模的结果.1 ≤ n ≤ 100000 其中S(i,j)是第二类Stirling数,即有i个球,丢到j个盒子中,要求盒子不 ...

  4. 【BZOJ4555】求和(第二类斯特林数,组合数学,NTT)

    [BZOJ4555]求和(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 推推柿子 \[\sum_{i=0}^n\sum_{j=0}^iS(i,j)·j!·2^j\] \[=\sum_{i= ...

  5. 【BZOJ4555】求和(多种解法混合版本)

    [BZOJ4555]求和(多种解法混合版本) 题面 BZOJ 给定\(n\),求 \[f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i}S(i,j)\times 2^j \times ...

  6. [BZOJ4555][TJOI2016&HEOI2016]求和(分治FFT)

    4555: [Tjoi2016&Heoi2016]求和 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 525  Solved: 418[Sub ...

  7. [BZOJ4555 TJOI2016 HEOI2016 求和]

    ​ 第一篇博客,请大家多多关照.(鞠躬 BZOJ4555 TJOI2016 HEOI2016 求和 题意: ​ 给定一个正整数\(n\)(\(1\leqq n \leqq100000\)),求: \[ ...

  8. 【bzoj4555】[Tjoi2016&Heoi2016]求和 NTT

    题目描述 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: S(i, j)表示第二类斯特林数,递推公式为: S(i, j) = j ∗ S(i − 1, j) ...

  9. 【BZOJ4555】【TJOI2016】【HEOI2016】求和

    题目 传送门 解法 我们可以用容斥来求第二类斯特林数 我们知道, 第二类斯特林数\(S(n, k)\)是\(n\)个元素放进\(k\)个无标号的盒子里, 不可以含有空的. 于是我们可以考虑可以含有空的 ...

  10. 【bzoj4555】[Tjoi2016&Heoi2016]求和(NTT+第二类斯特林数)

    传送门 题意: 求 \[ f(n)=\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatrix} i \\ j \end{Bmatrix}2^jj! \] 思路: 直接将第二类斯特林 ...

随机推荐

  1. LeetCode:49. Group Anagrams(Medium)

    1. 原题链接 https://leetcode.com/problems/group-anagrams/description/ 2. 题目要求 给定一个字符串数组,将数组中包含相同字母的元素放在同 ...

  2. 弹性分布式数据集RDD概述

      [Spark]弹性分布式数据集RDD概述 弹性分布数据集RDD RDD(Resilient Distributed Dataset)是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作 ...

  3. 卸载Oracle 11g

    卸载oracle只需要执行deinstall.ba即可 运行.bat文件 按照提示步骤进行卸载 .bat文件所在目录需要手动删除,需要在程序管理器里面关掉Oracle的进程,在删除当前文件夹

  4. SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false

    根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s is ...

  5. Siki_Unity_1-5_见缝插针

    1-5 见缝插针 任务1:资源下载 任务2:案例演示 任务3:创建工程和场景 Project Name:StickPin import素材,为两张png图 创建各个分类文件夹Scenes/ Prefa ...

  6. 【system.file】使用说明

    对象:system.file 说明:提供一系列针对文件操作的方法. 注意:参数中的filePath 均为相对网站根目录路径 目录: 方法 返回 说明 system.file.exists(filePa ...

  7. JAVA基础学习之路(二)方法定义,重载,递归

    一,方法的定义: package test; public class test1 { public static void main(String args[]) { int result = ad ...

  8. 【转载】IOS之禁用UIWebView的默认交互行为

    原文地址 :IOS之禁用UIWebView的默认交互行为 http://my.oschina.net/hmj/blog/111344 UIKit提供UIWebView组件,允许开发者在App中嵌入We ...

  9. [Clr via C#读书笔记]Cp8方法

    Cp8方法 构造器 作用就是初始化所有成员字段:.ctor:派生类和基类都有自己的构造函数.默认有一个无参数的构造函数,值字段初始化为0,引用字段初始化为null:可以有多个构造器: 值类型的初始化其 ...

  10. yun rpm

    RPM:RedHat Package Manager的简称,是一种数据库记录的方式的管理机制.当需要安装的软件的依赖软件都已经安装,则继续安装,否则不予安装. 特点:1.已经编译并打包完成2.软件的信 ...