【TJOI/HEOI2016】求和
题面
题目分析
\[ \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】求和相关推荐
- 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 ...
- 「实验性讲稿」载谭 Binomial Sums 详解
如 G. Pólya 在他的教育著作<怎样解题>中所说:"尽可能形式地证明我们所直观看到的,以及尽可能直观地看出我们所形式证明过的,这是一种增进智力的练习.不幸,在教学中,并不总 ...
- 【TJOJI\HEOI2016】求和
[TJOI/HEOI2016]求和 这题好难啊!! 斯特林数+NTT. 首先我们将第二类斯特林数用容斥展开,具体原理不解释了. \(\displaystyle S(i,j)=\frac{1}{j!}\ ...
- 【BZOJ 4555】 4555: [Tjoi2016Heoi2016]求和 (NTT)
4555: [Tjoi2016&Heoi2016]求和 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 315 Solved: 252 De ...
- bzoj#4555. [Tjoi2016Heoi2016]求和
bzoj#4555. [Tjoi2016&Heoi2016]求和 题目描述 Solution 有一个关于第二类斯特林数的公式: {nm}=1m!∑i(mk)(m−k)n(−1)k\left\{ ...
- 斯特林数-斯特林反演
斯特林数 定义: 自行百度 递推式: \[ \begin{Bmatrix}n\\k \end{Bmatrix}=\begin{Bmatrix}n-1\\k-1\end{Bmatrix}+k\cdot ...
- [总结]2019年9月 OI学习/刷题记录
从现在开始记录一下每天的学习情况.主力LOJ? 2019/9/5 LibreOJ #2543. 「JXOI2018」排序问题 答案显然是\(\frac{(n+m)!}{Cnt_1!Cnt_2!\cdo ...
- P5395 【模板】第二类斯特林数·行
P5395 [模板]第二类斯特林数·行 题目描述 Solution 这题是[Tjoi2016&Heoi2016]求和的前置技能啊-- 我似乎直接跳过这题,去做应用了QAQQAQQAQ. Cod ...
- Fast Fourier Transform
写在前面的.. 感觉自己是应该学点新东西了.. 所以就挖个大坑,去学FFT了.. FFT是个啥? 坑已补上.. 推荐去看黑书<算法导论>,讲的很详细 例题选讲 1.UOJ #34. 多项式 ...
最新文章
- App.Config 和 WebConfig 特殊字符的转义码对应关系
- C# 对字符进行UrlEncode/UrlDecode
- 中小企业私有云解决方案浅谈
- [转载] 多线程详解java.util.concurrent
- js中prototype用法
- .net core精彩实例分享 -- LINQ
- python将object转换为float_如何在python中将datatype:object转换为float64?
- torch.randn
- 张云飞 201771010143 《面对对象程序设计(java)》第十七周学习总结
- Android NuPlayer播放框架
- 找零钱问题系列之暴力搜索
- 数据结构实验报告一 顺序表与链表
- 波浪数,51nod1788,根号分治+Meet in the Middle
- 一道好玩的逻辑题之蓝眼睛红眼睛
- python学习-飞机大战
- 实验一 验证删除快照时VMware会改变父快照或基础磁盘
- java pow实现_实现Java Math.pow(double a,double b) 方法
- 微信小程序界面设计入门课程-样式wxss中使用css课程-字体-font-style字体风格
- Fluent非稳态工况模拟中固定时间步数据输出
- docekrfile