题面

题目分析

\[ \begin{split} \sum_{i=0}^n\sum_{j=0}^iS(i,j)\cdot 2^j\cdot j!&=\sum_{j=0}^n2^j\cdot j!\sum_{i=0}^nS(i,j)\\ &=\sum_{j=0}^n2^j\cdot j!\sum_{i=0}^n\sum_{k=0}^j\frac {(-1)^k}{k!}\cdot \frac{(j-k)^i}{(j-k)!}\\ &=\sum_{j=0}^n2^j\cdot j!\sum_{k=0}^j\frac {(-1)^k}{k!}\cdot \frac{\sum\limits_{i=0}^n(j-k)^i}{(j-k)!}\\ \end{split} \]

最终,\(\sum\limits_{i=0}^n(j-k)^i\)是等比数列求和,可以\(O(1)\)计算。

设\(g(i)=\frac{i^{n+1}-1}{(i-1)\cdot i!},g(0)=1,g(1)=n+1\),\(f(i)=\frac {(-1)^i}{i!}\)。

所以有
\[ ans=\sum_{j=0}^n2^j\cdot j!\sum_{k=0}^jf(k)\cdot g(j-k) \]

\(\sum_{k=0}^jf(k)\cdot g(j-k)\)是一个卷积,可以NTT计算。

代码实现

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#define MAXN 0x7fffffff
typedef long long LL;
const int N=400005,mod=998244353;
using namespace std;
inline int Getint(){register int x=0,f=1;register char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}return x*f;}
int ksm(int x,int k){int ret=1;while(k){if(k&1)ret=(LL)ret*x%mod;x=(LL)x*x%mod,k>>=1;}return ret;
}
int rev[N];
void NTT(int *a,int x,int K){int n=(1<<x);for(int i=0;i<n;i++)if(i<rev[i])swap(a[i],a[rev[i]]);for(int i=1;i<n;i<<=1){int tmp=i<<1,wn=ksm(3,(mod-1)/tmp);if(K==-1)wn=ksm(wn,mod-2);for(int j=0;j<n;j+=tmp){int w=1;for(int k=0;k<i;k++,w=(LL)w*wn%mod){int x=a[j+k],y=(LL)w*a[i+j+k]%mod;a[j+k]=(x+y)%mod,a[i+j+k]=(x-y+mod)%mod;} }}if(K==-1){int inv=ksm(n,mod-2);for(int i=0;i<n;i++)a[i]=(LL)a[i]*inv%mod;}
}
int a[N],b[N],fac[N];
int main(){int n=Getint();fac[0]=1;for(int i=1;i<=n;i++)fac[i]=(LL)fac[i-1]*i%mod;a[0]=1,b[0]=1,b[1]=n+1;for(int i=1;i<=n;i++)a[i]=(((i&1)?-1:1)*ksm(fac[i],mod-2)+mod)%mod;for(int i=2;i<=n;i++)b[i]=(LL)(ksm(i,n+1)+mod-1)%mod*ksm((LL)(i-1)*fac[i]%mod,mod-2)%mod; int x=ceil(log2(n<<1|1));for(int i=0;i<(1<<x);i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<x-1);NTT(a,x,1),NTT(b,x,1);for(int i=0;i<(1<<x);i++)a[i]=(LL)a[i]*b[i]%mod;NTT(a,x,-1);int ans=0;for(int i=0,t=1;i<=n;i++,t=((LL)t<<1)%mod)ans=(ans+(LL)fac[i]*t%mod*a[i]%mod)%mod;cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/Emiya-wjk/p/10021111.html

【TJOI/HEOI2016】求和相关推荐

  1. loj2058 「TJOI / HEOI2016」求和 NTT

    loj2058 「TJOI / HEOI2016」求和 NTT 链接 loj 思路 \[S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^{k}C_{j}^{k ...

  2. 「实验性讲稿」载谭 Binomial Sums 详解

    如 G. Pólya 在他的教育著作<怎样解题>中所说:"尽可能形式地证明我们所直观看到的,以及尽可能直观地看出我们所形式证明过的,这是一种增进智力的练习.不幸,在教学中,并不总 ...

  3. 【TJOJI\HEOI2016】求和

    [TJOI/HEOI2016]求和 这题好难啊!! 斯特林数+NTT. 首先我们将第二类斯特林数用容斥展开,具体原理不解释了. \(\displaystyle S(i,j)=\frac{1}{j!}\ ...

  4. 【BZOJ 4555】 4555: [Tjoi2016Heoi2016]求和 (NTT)

    4555: [Tjoi2016&Heoi2016]求和 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 315  Solved: 252 De ...

  5. bzoj#4555. [Tjoi2016Heoi2016]求和

    bzoj#4555. [Tjoi2016&Heoi2016]求和 题目描述 Solution 有一个关于第二类斯特林数的公式: {nm}=1m!∑i(mk)(m−k)n(−1)k\left\{ ...

  6. 斯特林数-斯特林反演

    斯特林数 定义: 自行百度 递推式: \[ \begin{Bmatrix}n\\k \end{Bmatrix}=\begin{Bmatrix}n-1\\k-1\end{Bmatrix}+k\cdot ...

  7. [总结]2019年9月 OI学习/刷题记录

    从现在开始记录一下每天的学习情况.主力LOJ? 2019/9/5 LibreOJ #2543. 「JXOI2018」排序问题 答案显然是\(\frac{(n+m)!}{Cnt_1!Cnt_2!\cdo ...

  8. P5395 【模板】第二类斯特林数·行

    P5395 [模板]第二类斯特林数·行 题目描述 Solution 这题是[Tjoi2016&Heoi2016]求和的前置技能啊-- 我似乎直接跳过这题,去做应用了QAQQAQQAQ. Cod ...

  9. Fast Fourier Transform

    写在前面的.. 感觉自己是应该学点新东西了.. 所以就挖个大坑,去学FFT了.. FFT是个啥? 坑已补上.. 推荐去看黑书<算法导论>,讲的很详细 例题选讲 1.UOJ #34. 多项式 ...

最新文章

  1. App.Config 和 WebConfig 特殊字符的转义码对应关系
  2. C# 对字符进行UrlEncode/UrlDecode
  3. 中小企业私有云解决方案浅谈
  4. [转载] 多线程详解java.util.concurrent
  5. js中prototype用法
  6. .net core精彩实例分享 -- LINQ
  7. python将object转换为float_如何在python中将datatype:object转换为float64?
  8. torch.randn
  9. 张云飞 201771010143 《面对对象程序设计(java)》第十七周学习总结
  10. Android NuPlayer播放框架
  11. 找零钱问题系列之暴力搜索
  12. 数据结构实验报告一 顺序表与链表
  13. 波浪数,51nod1788,根号分治+Meet in the Middle
  14. 一道好玩的逻辑题之蓝眼睛红眼睛
  15. python学习-飞机大战
  16. 实验一 验证删除快照时VMware会改变父快照或基础磁盘
  17. java pow实现_实现Java Math.pow(double a,double b) 方法
  18. 微信小程序界面设计入门课程-样式wxss中使用css课程-字体-font-style字体风格
  19. Fluent非稳态工况模拟中固定时间步数据输出
  20. docekrfile

热门文章

  1. javascript对象的几种创建方式
  2. pycryptodom的源码安装
  3. LeetCode 31 Next Permutation(下一个全排列)
  4. sublime必备插件
  5. Python第四章-字典
  6. POJ3498最大流,枚举终点,企鹅,基础最大流
  7. UVA11100旅行(大包装小包,问最少多少个包)
  8. C语言-用gcc指令体验C语言编译过程
  9. 计算机网络第一章:计算机网络概述
  10. 【数字信号处理】傅里叶变换性质 ( 频域函数的共轭对称分解 | 序列的傅里叶变换 | 傅里叶变换的共轭对称 | 傅里叶变换的共轭反对称 )