【题解】Luogu P4091 [HEOI2016/TJOI2016]求和
原题传送门
{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]求和的更多相关文章
- 【题解】P4091 [HEOI2016/TJOI2016]求和
[题解]P4091 [HEOI2016/TJOI2016]求和 [P4091 HEOI2016/TJOI2016]求和 可以知道\(i,j\)从\(0\)开始是可以的,因为这个时候等于\(0\).这种 ...
- BZOJ 4555 Luogu P4091 [HEOI2016/TJOI2016]求和 (第二类斯特林数)
题目链接 (luogu) https://www.luogu.org/problem/P4091 (bzoj) https://www.lydsy.com/JudgeOnline/problem.ph ...
- 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^ ...
- 洛谷 P4091 [HEOI2016/TJOI2016]求和 解题报告
P4091 [HEOI2016/TJOI2016]求和 题目描述 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: \[ f(n)=\sum_{i=0}^n\ ...
- [洛谷P4091][HEOI2016/TJOI2016]求和
题目大意:给你$n(n\leqslant10^5)$,求:$$\sum\limits_{i=0}^n\sum\limits_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix ...
- Luogu 4091 [HEOI2016/TJOI2016]求和
BZOJ 4555 一道模板题. 第二类斯特林数有公式: $$S(n, m) = \frac{1}{m!}\sum_{i = 0}^{m}(-1)^i\binom{m}{i}(m - i)^n$$ 考 ...
- 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! ...
- P4091 [HEOI2016/TJOI2016]求和
留待警戒 FFT的时候长度要写的和函数里一样啊XD 瞎扯 这是个第二类斯特林数的理性愉悦颓柿子题目 颓柿子真的是让我hi到不行啦(才没有) 前置芝士 一个公式 \[ \sum_{i=0}^n t^i ...
- 【LG4091】[HEOI2016/TJOI2016]求和
[LG4091][HEOI2016/TJOI2016]求和 题面 要你求: \[ \sum_{i=0}^n\sum_{j=0}^iS(i,j)*2^j*j! \] 其中\(S\)表示第二类斯特林数,\ ...
随机推荐
- How to prove that SAP CRM WebUI is a stateful application
I create an enhancement in this function module to print out current session id: As long as I do not ...
- linux下使用selenium
安装chromedriver 1.安装chrome 用下面的命令安装最新的 Google Chrome yum install https://dl.google.com/linux/direct/g ...
- pgsql主备搭建及切换
二.主从搭建 2.1测试目标 测试postgresql主从搭建安装过程 2.2环境准备 实例级别的复制 流复制主库可读写,但从库只允许查询不允许写人, 而逻辑复制的从库可读写 流复制实验环境 主机 主 ...
- CDH报错:ScmActive at bootup: Failed to validate the identity of Cloudera Manager.
报错原因以及解决办法在官网: https://www.cloudera.com/documentation/enterprise/5-8-x/topics/cm_failover_db.html 1. ...
- Nginx 反向代理功能-实现Nginx tcp负载均衡
Nginx 反向代理功能-实现Nginx tcp负载均衡 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- 什么是amp?amp有什么用处?
AMP是移动页面加速器Accelerated Mobile Pages的简称,是Google带领开发的开源项目,目的是为提升移动设备对网站的访问速度.它的核心称作AMP HTML,是一种新型的HTML ...
- 12-C#笔记-可空类型
区别于C++,C#定义的NULL和0不同.更严格. C#的基本类型,区分为可空和不可空 主要涉及两个符号 单问号? 双问号?? 示例如下: using System; namespace Calcul ...
- 排序算法-冒泡排序(Java)
package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className BubbleSort * @date 20 ...
- LeetCode 1034. Coloring A Border
原题链接在这里:https://leetcode.com/problems/coloring-a-border/ 题目: Given a 2-dimensional grid of integers, ...
- Windbg Command Browser(命令浏览器)窗口的使用
命令浏览器窗口显示并存储调试器命令的文本结果.此窗口创建命令引用,使您可以查看特定命令的结果,而无需重新输入该命令.命令浏览器窗口还提供了对存储的命令的导航,因此您可以比使用调试器命令窗口更快地访问命 ...