BZOJ 4555 [Tjoi2016Heoi2016]求和
题目链接
https://www.lydsy.com/JudgeOnline/problem.php?id=4555
题解
其中(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]求和相关推荐
- bzoj#4555. [Tjoi2016Heoi2016]求和
bzoj#4555. [Tjoi2016&Heoi2016]求和 题目描述 Solution 有一个关于第二类斯特林数的公式: {nm}=1m!∑i(mk)(m−k)n(−1)k\left\{ ...
- 【BZOJ 4555】 4555: [Tjoi2016Heoi2016]求和 (NTT)
4555: [Tjoi2016&Heoi2016]求和 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 315 Solved: 252 De ...
- 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) ...
- 【BZOJ 4555】[Tjoi2016Heoi2016]求和 多项式求逆/NTT+第二类斯特林数
出处0.0 用到第二类斯特林数的性质,做法好像很多,我打的是直接ntt,由第二类斯特林数的容斥公式可以推出,我们可以对于每一个i,来一次ntt求出他与所有j组成的第二类斯特林数的值,这个时候我们是O( ...
- BZOJ 4555 Luogu P4091 [HEOI2016/TJOI2016]求和 (第二类斯特林数)
题目链接 (lugou) https://www.luogu.org/problem/P4091 (bzoj) https://www.lydsy.com/JudgeOnline/problem.ph ...
- ●BZOJ 4556 [Tjoi2016Heoi2016]字符串
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4556 题解: 巨恶心...但是题很好呀,可以练习好几个比较麻烦的算法~ 1).预处理 首先用 ...
- 输入挂(bzoj 2901: 矩阵求和)
很少用输入挂,以为不超时就好了,但是这题貌似不用过不去啊 只好拿出来用了,当个模板 原理是用getchar()读入会比用scanf快一些 int Read() {int x = 0, f = 1;ch ...
- BZOJ 2901: 矩阵求和
2901: 矩阵求和 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 411 Solved: 216 [Submit][Status][Discus ...
- BZOJ P4554 [Tjoi2016Heoi2016]游戏
BZOJ P4554 [Tjoi2016&Heoi2016]游戏 题目 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个 ...
最新文章
- 阿里深度序列匹配模型SDM:如何刻画大型推荐系统的用户行为?
- java架构升级_java架构之路(多线程)synchronized详解以及锁的膨胀升级过程
- 不想学python-没想到,学会Python即使不做程序员都能月入过万!
- 配置apache支持cgi
- java html entity encoding,实体“HTML.Version”的声明必须以''结尾
- [webpack3.8.1]Guides-4-Output Management(输出管理)
- 3. 中间件安全基础(三)
- jinja Template Synopsis
- iOS平台一套完善的Crash Report解决方案
- ePass.CreateFile
- Linux php5 curl 扩展
- VoIP服务器曝重大漏洞,黑客可以绕过管理员身份
- Algorithms Lecture 1 -- Introduction to asymptotic notations【渐进表示法】​​
- C盘爆满,你的专属清道夫来啦
- DAY 10 | 自学前端第十天
- PCB电路板Via、Pad孔的区分与安装孔、定位孔、金属孔、非金属孔的制作
- 用python画圆锥_echarts 怎么画椭圆或者画圆锥
- java软件工程师工作业绩_java软件工程师个人简历
- APP定制开发:APP软件开发的语言和开发环境
- css label 居中布局_label标签 html教程