原题传送门

\[\begin{aligned} a n s &=\sum_{i=0}^{n} \sum_{j=0}^{i}\left\{\begin{array}{c}{i} \\
{j}\end{array}\right\} 2^{j} \times j ! \\
&=\sum_{i=0}^{n} \sum_{j=0}^{n}\left\{\begin{array}{c}{i} \\
{j}\end{array}\right\} 2^{j} \times j ! \\
&=\sum_{j=0}^{n} 2^{j} \times j ! \sum_{i=0}^{n}\left\{\begin{array}{c}{i} \\ {j}\end{array}\right\} \\
&=\sum_{j=0}^{n} 2^{j} \times j ! \sum_{i=0}^n(\frac{1}{j !} \sum_{k=0}^j(-1)^k \tbinom{j}{k} (j-k)^i) \\
&=\sum_{j=0}^{n} 2^{j} \times j ! \sum_{i=0}^{n} \sum_{k=0}^{j} \frac{(-1)^{k}}{k !} \cdot \frac{(j-k)^{i}}{(j-k) !}
\\ &=\sum_{j=0}^{n} 2^{j} \times j ! \sum_{k=0}^{j} \frac{(-1)^{k}}{k !} \cdot \frac{(j-k)^{n+1}-1}{(j-k-1)(j-k) !} \end{aligned}\]

这就是一个很明显的卷积形式,NTT求一下即可

要注意一下最后一步,因为用了等比数列求和,所以\(1\)要特判

#include <bits/stdc++.h>
#define N 100005
#define mod 998244353
#define G 3
#define getchar nc
using namespace std;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
register int x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
inline void write(register int x)
{
if(!x)putchar('0');if(x<0)x=-x,putchar('-');
static int sta[20];register int tot=0;
while(x)sta[tot++]=x%10,x/=10;
while(tot)putchar(sta[--tot]+48);
}
inline int power(register int a,register int b)
{
int res=1;
while(b)
{
if(b&1)
res=1ll*res*a%mod;
a=1ll*a*a%mod;
b>>=1;
}
return res;
}
int n,fac[N],invf[N],f[N<<2],g[N<<2],R[N<<2],ans;
inline void NTT(register int *a,register int n,register int f)
{
for(register int i=0;i<n;++i)
if(i<R[i])
swap(a[i],a[R[i]]);
for(register int i=1;i<n;i<<=1)
{
int T=power(G,(mod-1)/(i<<1));
if(f==-1)
T=power(T,mod-2);
for(register int j=0;j<n;j+=(i<<1))
{
int t=1;
for(register int k=0;k<i;++k,t=1ll*t*T%mod)
{
int Nx=a[j+k],Ny=1ll*t*a[i+j+k]%mod;
a[j+k]=(0ll+Nx+Ny)%mod;
a[i+j+k]=(0ll+Nx-Ny+mod)%mod;
}
}
}
}
int main()
{
n=read();
fac[0]=fac[1]=1;
for(register int i=2;i<=n;++i)
fac[i]=1ll*fac[i-1]*i%mod;
invf[n]=power(fac[n],mod-2);
for(register int i=n-1;i>=0;--i)
invf[i]=1ll*invf[i+1]*(i+1)%mod;
for(register int i=0;i<=n;++i)
f[i]=1ll*(i&1?mod-1:1)*invf[i]%mod;
for(register int i=0;i<=n;++i)
g[i]=1ll*(power(i,n+1)+mod-1)*power(i-1<0?i+mod-1:i-1,mod-2)%mod*invf[i]%mod;
g[1]=n+1;
int lim=1,ct=0;
while(lim<n<<1)
lim<<=1,++ct;
for(register int i=0;i<lim;++i)
R[i]=(R[i>>1]>>1)|((i&1)<<(ct-1));
NTT(f,lim,1),NTT(g,lim,1);
for(register int i=0;i<lim;++i)
f[i]=1ll*f[i]*g[i]%mod;
NTT(f,lim,-1);
int inv=power(lim,mod-2);
for(register int i=0;i<=n;++i)
ans=(0ll+ans+1ll*power(2,i)*fac[i]%mod*f[i]%mod*inv%mod)%mod;
write(ans);
return 0;
}

【题解】Luogu P4091 [HEOI2016/TJOI2016]求和的更多相关文章

  1. 【题解】P4091 [HEOI2016/TJOI2016]求和

    [题解]P4091 [HEOI2016/TJOI2016]求和 [P4091 HEOI2016/TJOI2016]求和 可以知道\(i,j\)从\(0\)开始是可以的,因为这个时候等于\(0\).这种 ...

  2. BZOJ 4555 Luogu P4091 [HEOI2016/TJOI2016]求和 (第二类斯特林数)

    题目链接 (luogu) https://www.luogu.org/problem/P4091 (bzoj) https://www.lydsy.com/JudgeOnline/problem.ph ...

  3. luogu P4091 [HEOI2016/TJOI2016]求和

    传送门 这一类题都要考虑推式子 首先,原式为\[f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i}S(i,j)*2^j*j!\] 可以看成\[f(n)=\sum_{j=0}^{n}2^ ...

  4. 洛谷 P4091 [HEOI2016/TJOI2016]求和 解题报告

    P4091 [HEOI2016/TJOI2016]求和 题目描述 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: \[ f(n)=\sum_{i=0}^n\ ...

  5. [洛谷P4091][HEOI2016/TJOI2016]求和

    题目大意:给你$n(n\leqslant10^5)$,求:$$\sum\limits_{i=0}^n\sum\limits_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix ...

  6. Luogu 4091 [HEOI2016/TJOI2016]求和

    BZOJ 4555 一道模板题. 第二类斯特林数有公式: $$S(n, m) = \frac{1}{m!}\sum_{i = 0}^{m}(-1)^i\binom{m}{i}(m - i)^n$$ 考 ...

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

  8. P4091 [HEOI2016/TJOI2016]求和

    留待警戒 FFT的时候长度要写的和函数里一样啊XD 瞎扯 这是个第二类斯特林数的理性愉悦颓柿子题目 颓柿子真的是让我hi到不行啦(才没有) 前置芝士 一个公式 \[ \sum_{i=0}^n t^i ...

  9. 【LG4091】[HEOI2016/TJOI2016]求和

    [LG4091][HEOI2016/TJOI2016]求和 题面 要你求: \[ \sum_{i=0}^n\sum_{j=0}^iS(i,j)*2^j*j! \] 其中\(S\)表示第二类斯特林数,\ ...

随机推荐

  1. 安装Docker报container-selinux >= 2.9错

    Docker装了无数次,还是会遇到如此熟悉的问题,知道他是版本需要更新,但是就是找不到对应的,在网上找了差不多一个下午都没弄好.发现平时还是要多动脑子才行,既然知道是版本需要更新,那么到官网直接找版本 ...

  2. IDEA Mac 快捷键

    智能提示 ⌘ -> command ⇧ -> shift ⌥ -> option ⬆ -> 上箭头 ⬇ -> 下箭头 ⌃ -> Control 编辑 快捷键 说明 ...

  3. Python基础(二)--基本数据类型、格式化输出、基本运算符

    一.基本数据类型 1.数字类型 #int整型 定义:age=10 #age=int(10) 用于标识:年龄,等级,身份证号,qq号,个数 #float浮点型 定义:salary=3.1 #salary ...

  4. 分布式异步框架celery

    Celery 1.什么是Clelery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery架构 Celery的架构由三部分组 ...

  5. rhel7学习第五天

    管道命令符的功能的确强大!

  6. HLOJ1361 Walking on the Grid II 矩阵快速幂

    题目分析: 就当是一次记录吧,2013年绍兴市市赛的一题,重现赛当时我想递推可能是矩阵快速幂吧,但是这个递推公式真没推出来(赛后猛如虎系列),这题和第一题有联系又有区别,第一题的递推很简单,dp[i] ...

  7. Android开发:为什么你的学习效率如此低,为什么你很迷茫?

    一天一天的过的真的是太快了,常常感到时间在前进,而我们还在停滞不前,看似每天努力的工作学习着,仔细想想其实又会发现,一天下来我们好像还真的什么都没干,看似忙碌的一天,我们把时间都用在哪了?学习!可是为 ...

  8. centos安装安全狗5步就能完成

    安全狗是为服务器开发的一款服务器管理软件,客户的服务器是centos 64位,我们就来看看如何安装吧.首先必须得有root账号权限,不然下面的步骤可能都无法执行.随ytkah一起来操作吧 1.下载安全 ...

  9. selenium 滚动条的滚动

    如果是一个页面自带的滚动条(即网页的的滚动条) 可直接用js js="window.scrollTo(x,y);"     x(横向),y(纵向)代表的就是位置  ,具体移动到哪里 ...

  10. redis主从+redis的哨兵模式

    三台机器分布 192.168.189.129  //  master的角色 192.168.189.130  //  slave1的角色 192.168.189.131  //  salve2的角色 ...