题目链接

https://www.lydsy.com/JudgeOnline/problem.php?id=4555

题解

f(n)=∑i=0n∑j=0iS(i,j)×2j×j!=∑i=0n∑j=0nS(i,j)×2j×j!=∑i=0n∑j=0n2j∑k=0j(−1)k(jk)(j−k)i=∑i=0n∑j=0n2j×j!∑k=0j(−1)kk!×(j−k)i(j−k)!=∑j=0n2j×j!∑k=0j(−1)kk!×∑ni=0(j−k)i(j−k)!(1)(2)(1)(3)(2)(1)f(n)=∑i=0n∑j=0iS(i,j)×2j×j!(2)=∑i=0n∑j=0nS(i,j)×2j×j!(1)=∑i=0n∑j=0n2j∑k=0j(−1)k(jk)(j−k)i(3)=∑i=0n∑j=0n2j×j!∑k=0j(−1)kk!×(j−k)i(j−k)!(2)=∑j=0n2j×j!∑k=0j(−1)kk!×∑i=0n(j−k)i(j−k)!

其中(1)(1)步骤使用了第二类斯特林数的展开式S(i,j)=1j!∑jk=0(−1)k(jk)(j−k)iS(i,j)=1j!∑k=0j(−1)k(jk)(j−k)i,(2)(2)步骤是一个卷积形式,模数比较特殊可以用NTT优化,∑ni=0(j−k)i∑i=0n(j−k)i很明显是一个等比数列求和。

代码

#include <cstdio>
#include <algorithm>int read()
{int x=0,f=1;char ch=getchar();while((ch<'0')||(ch>'9')){if(ch=='-'){f=-f;}ch=getchar();}while((ch>='0')&&(ch<='9')){x=x*10+ch-'0';ch=getchar();}return x*f;
}const int maxn=200000;
const int maxm=340000;
const int mod=998244353;
const int G=3;int quickpow(int a,int b,int m)
{int res=1;while(b){if(b&1){res=1ll*res*a%m;}a=1ll*a*a%m;b>>=1;}return res;
}int add(int x,int y,int m)
{int res=x+y;if(res>=m){res-=m;}return res;
}int minus(int x,int y,int m)
{int res=x-y;if(res<0){res+=m;}return res;
}int rev[maxm+10],a[maxm+10],b[maxm+10],ans[maxm+10];int getrev(int n)
{int m=1,len=0;while(m<=n){m<<=1;++len;}for(int i=1; i<m; ++i){rev[i]=(rev[i>>1]>>1)+((i&1)<<(len-1));}return m;
}int fft(int *s,int len)
{for(int i=0; i<len; ++i){if(rev[i]<i){std::swap(s[rev[i]],s[i]);}}for(int i=2; i<=len; i<<=1){int gn=quickpow(G,(mod-1)/i,mod);for(int j=0; j<len; j+=i){int g=1;for(int k=0; k<(i>>1); ++k){int x=s[j+k],y=1ll*g*s[j+k+(i>>1)]%mod;s[j+k]=add(x,y,mod);s[j+k+(i>>1)]=minus(x,y,mod);g=1ll*g*gn%mod;}}}return 0;
}int main()
{int n=read();a[0]=1;int v=1;for(int i=1; i<=n; ++i){v=1ll*minus(0,v,mod)*quickpow(i,mod-2,mod)%mod;a[i]=v;}b[0]=1;v=1;for(int i=1; i<=n; ++i){v=1ll*v*quickpow(i,mod-2,mod)%mod;b[i]=1ll*minus(1,quickpow(i,n+1,mod),mod)*quickpow(minus(1,i,mod),mod-2,mod)%mod*v%mod;}b[1]=n+1;int m=getrev(n<<1);fft(a,m);fft(b,m);for(int i=0; i<m; ++i){ans[i]=1ll*a[i]*b[i]%mod;}fft(ans,m);std::reverse(ans,ans+m+1);v=quickpow(m,mod-2,mod);for(int i=0; i<m; ++i){ans[i]=1ll*ans[i]*v%mod;}v=1;int u=1;for(int i=0; i<=n; ++i){v=add(v,1ll*quickpow(2,i,mod)*u%mod*ans[i]%mod,mod);u=1ll*u*(i+1)%mod;}printf("%d\n",v);return 0;
}

转载于:https://www.cnblogs.com/Canopus-wym/p/10376153.html

BZOJ 4555 [Tjoi2016Heoi2016]求和相关推荐

  1. bzoj#4555. [Tjoi2016Heoi2016]求和

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

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

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

  3. BZOJ.4555.[HEOI2016TJOI2016]求和(NTT 斯特林数)

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

  4. 【BZOJ 4555】[Tjoi2016Heoi2016]求和 多项式求逆/NTT+第二类斯特林数

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

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

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

  6. ●BZOJ 4556 [Tjoi2016Heoi2016]字符串

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4556 题解: 巨恶心...但是题很好呀,可以练习好几个比较麻烦的算法~ 1).预处理 首先用 ...

  7. 输入挂(bzoj 2901: 矩阵求和)

    很少用输入挂,以为不超时就好了,但是这题貌似不用过不去啊 只好拿出来用了,当个模板 原理是用getchar()读入会比用scanf快一些 int Read() {int x = 0, f = 1;ch ...

  8. BZOJ 2901: 矩阵求和

    2901: 矩阵求和 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 411  Solved: 216 [Submit][Status][Discus ...

  9. BZOJ P4554 [Tjoi2016Heoi2016]游戏

    BZOJ P4554 [Tjoi2016&Heoi2016]游戏 题目 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个 ...

最新文章

  1. 阿里深度序列匹配模型SDM:如何刻画大型推荐系统的用户行为?
  2. java架构升级_java架构之路(多线程)synchronized详解以及锁的膨胀升级过程
  3. 不想学python-没想到,学会Python即使不做程序员都能月入过万!
  4. 配置apache支持cgi
  5. java html entity encoding,实体“HTML.Version”的声明必须以''结尾
  6. [webpack3.8.1]Guides-4-Output Management(输出管理)
  7. 3. 中间件安全基础(三)
  8. jinja Template Synopsis
  9. iOS平台一套完善的Crash Report解决方案
  10. ePass.CreateFile
  11. Linux php5 curl 扩展
  12. VoIP服务器曝重大漏洞,黑客可以绕过管理员身份
  13. Algorithms Lecture 1 -- Introduction to asymptotic notations【渐进表示法】​​
  14. C盘爆满,你的专属清道夫来啦
  15. DAY 10 | 自学前端第十天
  16. PCB电路板Via、Pad孔的区分与安装孔、定位孔、金属孔、非金属孔的制作
  17. 用python画圆锥_echarts 怎么画椭圆或者画圆锥
  18. java软件工程师工作业绩_java软件工程师个人简历
  19. APP定制开发:APP软件开发的语言和开发环境
  20. css label 居中布局_label标签 html教程

热门文章

  1. DPDK vhost-user详解(五)
  2. 听说redux和react-redux在写项目中更配哦
  3. Python入门(一)了解与安装
  4. 使用HAproxy为阿里中间件做负载均衡。
  5. 昆仑网(D×××)去中心化虚拟互联网基础功能图片式介绍,请全屏看。
  6. [转载] 大道至简:软件工程实践者的思想——第六章 谁是解结的人
  7. Emai乱码——解决的“迂回”战术
  8. mac mysql 可视化工具_推荐3款好用的Redis、MySQL和MongoDB可视化管理工具
  9. oracle之4多行函数之分组函数
  10. yd的拔钉子之路之 POI 2017