题目大意

读入n

求\(f(n)=\sum_{i=0}^n\sum_{j=0}^i\left\{\begin{matrix}i \\ j\end{matrix}\right\}*2^j*j!\)

分析

\(f(n)=\sum_{i=0}^n\sum_{j=0}^i\left\{\begin{matrix}i \\ j\end{matrix}\right\}*2^j*j!\)

因为斯特林三角中\(j>i\)时值为0,j枚举上界可以改为n

\(f(n)=\sum_{i=0}^n\sum_{j=0}^n\left\{\begin{matrix}i \\ j\end{matrix}\right\}*2^j*j!\)

改下求和顺序

\(f(n)=\sum_{j=0}^n2^j*j!\sum_{i=0}^n\left\{\begin{matrix}i \\ j\end{matrix}\right\}\)

关于斯特林三角形总和公式的推导见我上一篇博客

solution

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
const LL Q=998244353;
const int N=262144;
const int M=262145; inline int rd(){
int x=0;bool f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
for(;isdigit(c);c=getchar()) x=x*10+c-48;
return f?x:-x;
} int n;
int rev[N];
LL g;
LL fac[M];
LL ifac[M];
LL inv[M];
LL a[N];
LL b[N];
LL c[N]; LL pwr(LL x,LL tms,LL mod){
LL res=1;
for(;tms>0;tms>>=1){
if(tms&1) res=res*x%mod;
x=x*x%mod;
}
return res;
} void NTT(LL *a,int fl){
int i,j,k;
LL Wn,W,u,v;
for(i=0;i<N;i++) if(i<rev[i]) swap(a[i],a[rev[i]]);
for(i=2;i<=N;i<<=1){
if(fl==1) Wn=pwr(g,(Q-1)/i,Q);
else Wn=pwr(inv[g],(Q-1)/i,Q);
for(j=0;j<N;j+=i){
for(W=1,k=j;k<j+i/2;k++,W=W*Wn%Q){
u=a[k];
v=a[k+i/2]*W%Q;
a[k]=(u+v)%Q;
a[k+i/2]=((u-v)%Q+Q)%Q;
}
}
}
if(fl==-1)
for(i=0;i<N;i++) a[i]=a[i]*inv[N]%Q;
} bool judge(LL x,LL mm){
for(int i=2;i*i<=mm;i++)
if((mm-1)%i==0&&pwr(x,(mm-1)/i,mm)==1) return 0;
return 1;
} LL getrt(LL mm){
if(mm==2)return 1;
for(int i=2;;i++)
if(judge(i,mm)) return i;
} int main(){
int i,kd; n=rd(); for(i=0;i<N;i++) rev[i]=(rev[i>>1]>>1)|((i&1)?(N>>1):0);
for(inv[1]=1,i=2;i<M;i++) inv[i]=(Q-Q/i)*inv[Q%i]%Q;
for(fac[0]=1,i=1;i<M;i++) fac[i]=fac[i-1]*i%Q;
for(ifac[0]=1,i=1;i<M;i++) ifac[i]=ifac[i-1]*inv[i]%Q; for(i=0;i<=n;i++){
kd=(i&1)?-1:1;
a[i]=((kd*ifac[i])%Q+Q)%Q;
} b[0]=1;b[1]=n+1;
for(i=2;i<=n;i++){
b[i]=((pwr(i,n+1,Q)-1)%Q+Q)%Q*inv[i-1]%Q*ifac[i]%Q;
} g=getrt(Q);
NTT(a,1);
NTT(b,1);
for(i=0;i<N;i++) c[i]=a[i]*b[i]%Q;
NTT(c,-1); LL ans=0;
for(i=0;i<=n;i++)
ans=(ans+(pwr(2,i,Q)*fac[i]%Q*c[i]%Q))%Q; printf("%lld\n",ans); return 0;
}

bzoj 4555 NTT优化子集斯特林的更多相关文章

  1. bzoj 4555 [Tjoi2016&Heoi2016] 求和 —— 第二类斯特林数+NTT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555 关于第二类斯特林数:https://www.cnblogs.com/Wuweizhen ...

  2. [BZOJ 4555][Tjoi2016&Heoi2016]求和

    题意 给定 $n$ , 求下式的值: $$ f(n)= \sum_{i=0}^n\sum_{j=0}^i\begin{Bmatrix}i\\ j\end{Bmatrix}\times 2^j\time ...

  3. ZOJ 3874 Permutation Graph (分治NTT优化DP)

    题面:vjudge传送门 ZOJ传送门 题目大意:给你一个排列,如果两个数构成了逆序对,就在他们之间连一条无向边,这样很多数会构成一个联通块.现在给出联通块内点的编号,求所有可能的排列数 推来推去容易 ...

  4. 4.13 省选模拟赛 树 树形dp 卷积 NTT优化dp.

    考试的时候 看到概率 看到期望我就怂 推了一波矩阵树推自闭了 发现 边权点权的什么也不是. 想到了树形dp 维护所有边的断开情况 然后发现数联通块的和再k次方过于困难. 这个时候 应该仔细观察一下 和 ...

  5. bzoj 4555 [Tjoi2016&Heoi2016]求和 NTT 第二类斯特林数 等比数列求和优化

    [Tjoi2016&Heoi2016]求和 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 679  Solved: 534[Submit][S ...

  6. BZOJ 4555: [Tjoi2016&Heoi2016]求和 (NTT + 第二类斯特林数)

    题意 给你一个数 \(n\) 求这样一个函数的值 : \[\displaystyle f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i} \begin{Bmatrix} i \\ j ...

  7. bzoj 4555 [Tjoi2016&Heoi2016]求和——NTT+第二类斯特林数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555 第二类斯特林数展开式: \( S(i,j) = \frac{1}{j!} \sum\l ...

  8. BZOJ.4555.[HEOI2016&TJOI2016]求和(NTT 斯特林数)

    题目链接 \(Description\) 求\[\sum_{i=0}^n\sum_{j=0}^iS(i,j)\times 2^j\times j!\mod 998244353\] 其中\(S(i,j) ...

  9. 【BZOJ 4555】[Tjoi2016&Heoi2016]求和 多项式求逆/NTT+第二类斯特林数

    出处0.0用到第二类斯特林数的性质,做法好像很多,我打的是直接ntt,由第二类斯特林数的容斥公式可以推出,我们可以对于每一个i,来一次ntt求出他与所有j组成的第二类斯特林数的值,这个时候我们是O(n ...

随机推荐

  1. 安装python3.6 pip3 flake8

    apt-get install python3-pip # Python3 ➜  ~ pip3 -V                                             pip 9 ...

  2. 用requests爬取图片

    # coding=utf-8 from bs4 import BeautifulSoup import requests import urllib x = 1 def crawl(url): res ...

  3. macbook secureCRT终端中文乱码的问题

    最近mac用crt中文总是显示的是一串串问号, 而用自带的终端软件就不会出现乱码, 经过一番折腾暂时解决了这一问题, 方法如下: 1. 打开终端操作 sudo vim /etc/profile 在最后 ...

  4. VS code 豆沙绿护眼主题

    一.下载亮色主题Atom One Light 二.找到settings.JSON,粘贴JSON 快捷键输入  Ctrl+Shift+p   ,输入settings,选择open settings (J ...

  5. 虚拟机设置NAT

    需要开启虚拟机网络相关服务, 安装虚拟网卡, 还有必须安装 VMware Tools VMware虚拟机下实现NAT方式上网1. 把你的虚拟网卡VMnet8设置为自动获得IP.自动获得DNS服务器,启 ...

  6. 原型与原型继承demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Ansible的使用和模块化深入

    Ansible配置 配置文件:/etc/ansible/ansible.cfg [default] 默认配置 inventory = /etc/ansible/hosts主机清单 library = ...

  8. k8s Pod的自动水平伸缩(HPA)

    我们知道,当访问量或资源需求过高时,使用:kubectl scale命令可以实现对pod的快速伸缩功能 但是我们平时工作中我们并不能提前预知访问量有多少,资源需求多少. 这就很麻烦了,总不能为了需求总 ...

  9. Relu的缺点

    Relu不适合梯度过大的的输入 Relu是我们在训练网络时常用的激活函数之一(对我而言没有之一).然而最近发现Relu太脆弱了,经常由于输入的函数梯度过大导致网络参数更新后,神经元不再有激活功能.特别 ...

  10. GoF23种设计模式之行为型模式之策略模式

    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 1概述           定义一系列算法,把它们一个个都封装起来,并且让它们可以相互 ...