题目

[HEOI2016/TJOI2016]求和

关于斯特林数与反演的更多姿势\(\Longrightarrow\)点这里

做法

\[\begin{aligned}\\
Ans&=\sum\limits_{i=0}^n \sum\limits_{j=0}^i \begin{Bmatrix}i\\j\end{Bmatrix}2^j×j!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1\\
&=\sum\limits_{i=0}^n \sum\limits_{j=0}^n \begin{Bmatrix}i\\j\end{Bmatrix}2^j×j!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2\\
&=\sum\limits_{j=0}^n 2^j×j!\sum\limits_{i=0}^n \begin{Bmatrix}i\\j\end{Bmatrix}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3\\
&=\sum\limits_{j=0}^n 2^j×j!\sum\limits_{i=0}^n \sum\limits_{k=0}^j\frac{(-1)^k}{k!}\cdot\frac{(j-k)^i}{(j-k)!}~~~~~~~~~~~~~~~~~~~~4\\
&=\sum\limits_{j=0}^n 2^j×j!\sum\limits_{k=0}^j\frac{(-1)^k}{k!}\cdot\frac{ \sum\limits_{i=0}^n (j-k)^i}{(j-k)!}~~~~~~~~~~~~~~~~~~~~~~5\\
&=\sum\limits_{j=0}^n 2^j×j!\sum\limits_{k=0}^j\frac{(-1)^k}{k!}\cdot \frac{(j-k)^{n+1}-1}{(j-k-1)(j-k)!}~~~~~~~6\\
\end{aligned}\]

  • \(2:\begin{Bmatrix}i\\j\end{Bmatrix}=0(i>j)\)
  • \(3:\)移项
  • \(4:\)第二类斯特林的性质
  • \(5:\)移项化卷积
  • \(6:\)等比公式

总结

这题非常有意思,最后一步对于蒟蒻来说还是少见的,推到\(4\)谁都会,然后就无从下手了

以至于会从头考虑\(2^j×j!\)的性质,特别容易想偏

Code

#include<bits/stdc++.h>
typedef int LL;
typedef long long L;
const LL maxn=3e5+9,mod=998244353,g=3,_g=332748118;
inline LL Pow(LL base,LL b){
LL ret(1);
while(b){
if(b&1) ret=(L)ret*base%mod; base=(L)base*base%mod; b>>=1;
}return ret;
}
LL fac[maxn],fav[maxn],r[maxn],F[maxn],G[maxn],W[maxn];
inline void NTT(LL *a,LL n,LL type){
for(LL i=0;i<n;++i) if(i<r[i]) std::swap(a[i],a[r[i]]);
for(LL mid=1;mid<n;mid<<=1){
LL wn(Pow(type?g:_g,(mod-1)/(mid<<1)));
W[0]=1; for(LL i=1;i<mid;++i) W[i]=(L)W[i-1]*wn%mod;
for(LL R=mid<<1,j=0;j<n;j+=R)
for(LL k=0;k<mid;++k){
LL x(a[j+k]),y((L)W[k]*a[j+mid+k]%mod);
a[j+k]=x+y; if(a[j+k]>=mod) a[j+k]%=mod;
a[j+mid+k]=x-y; if(a[j+mid+k]<0) a[j+mid+k]+=mod;
}
}
}
inline LL Fir(LL n){
LL limit(1),len(0);
while(limit<n){
limit<<=1; ++len;
}
for(LL i=0;i<limit;++i) r[i]=(r[i>>1]>>1)|((i&1)<<len-1);
return limit;
}
inline LL Solve_fg(LL n){
for(LL i=0;i<=n;++i) F[i]=(L)(i&1?mod-1:1)*fav[i]%mod;
for(LL i=0;i<=n;++i) G[i]=(L)(Pow(i,n+1)+mod-1)%mod*Pow(i-1<0?i+mod-1:i-1,mod-2)%mod*fav[i]%mod;
G[1]=n+1;
LL limit(Fir(n+1<<1));
NTT(F,limit,1); NTT(G,limit,1);
for(LL i=0;i<limit;++i) F[i]=(L)F[i]*G[i]%mod;
NTT(F,limit,0);
LL ty(Pow(limit,mod-2)); for(LL i=0;i<=n;++i) F[i]=(L)F[i]*ty%mod; LL ret(0);
for(LL i=0;i<=n;++i) ret=(L)(ret+(L)Pow(2,i)*fac[i]%mod*F[i]%mod)%mod;
return ret;
}
LL n;
int main(){
scanf("%d",&n);
fac[0]=fac[1]=1;
for(LL i=2;i<=n;++i) fac[i]=(L)fac[i-1]*i%mod;
fav[n]=Pow(fac[n],mod-2);
for(LL i=n;i>=1;--i) fav[i-1]=(L)fav[i]*i%mod; printf("%d",Solve_fg(n));
return 0;
}

[HEOI2016/TJOI2016]求和(第二类斯特林数)的更多相关文章

  1. [HEOI2016/TJOI2016]求和——第二类斯特林数

    给你斯特林数就换成通项公式,给你k次方就换成斯特林数 考虑换成通项公式之后,组合数没有什么好的处理方法 直接拆开,消一消阶乘 然后就发现了(j-k)和k! 往NTT方向靠拢 然后大功告成 其实只要想到 ...

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

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

  3. 【BZOJ4555】【TJOI2016】【HEOI2016】求和 第二类斯特林数 NTT

    题目大意 求\(f(n)=\sum_{i=0}^n\sum_{j=0}^i2^j\times j!\times S(i,j)\\\) 对\(998244353\)取模 \(n\leq 100000\) ...

  4. bzoj 4555 [Tjoi2016&Heoi2016] 求和 —— 第二类斯特林数+NTT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555 关于第二类斯特林数:https://www.cnblogs.com/Wuweizhen ...

  5. BZOJ 4555:[TJOI2016&HEOI2016]求和(第二类斯特林数+NTT)

    题目链接 \(Description\) 求 \[\sum_{i=0}^n\sum_{j=0}^iS(i,j)2^jj!\]对998244353取模后的结果. \(n<=10^5\) \(Sol ...

  6. BZOJ4555 HEOI2016/TJOI2016求和(NTT+斯特林数)

    S(i,j)=Σ(-1)j-k(1/j!)·C(j,k)·ki=Σ(-1)j-k·ki/k!/(j-k)!.原式=ΣΣ(-1)j-k·ki·2j·j!/k!/(j-k)! (i,j=0~n).可以发现 ...

  7. bzoj 4555 [Tjoi2016&Heoi2016]求和 NTT 第二类斯特林数 等比数列求和优化

    [Tjoi2016&Heoi2016]求和 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 679  Solved: 534[Submit][S ...

  8. 【BZOJ 4555】[Tjoi2016&Heoi2016]求和 多项式求逆/NTT+第二类斯特林数

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

  9. 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! ...

随机推荐

  1. 上下居中css

    .css{ position: relative, top: 50%, transform: translateY(-50%) }

  2. centos6.5安装apache2

    参考 http://my.oschina.net/u/593517/blog/340289 http://blog.csdn.net/hkmaike/article/details/9732177

  3. 【VBA】制作散点图及打标签VBA

    1.散点图的制作必须只选择xy轴对应的数据,不能选中标签. 2.调整xy轴交叉点,改为四个象限. 3.通过菜单移动散点图到新表. 4.运行宏,打上文本标签. VBA如下 Sub AttachLabel ...

  4. cmake实战第二篇:让我们的代码更像个工程

    为工程添加以下文件夹:    bin 用来放编译好的可执行二进制文件. src 用来放源代码. lib 用来放编译好的库文件. include 用来放头文件. sudo mkdir -p /code_ ...

  5. android去权限反编译,签名,zipalign优化

    反编译:上工具ApkTool 下载自行搜索google  apktool github cd apktool目录 java -jar apktool_2.0.1.jar d xx.apk 生成xx目录 ...

  6. springboot2.1.1 中集成websocket 单元测试异常

    单元测试在没有集成websocket之前是好好的,当集成websocket之后就出现了下面的异常(只贴出来关键信息): 2019-01-11 10:05:42 [ERROR] [org.springf ...

  7. 修改yum源为阿里云的

    将Centos的yum源更换为国内的阿里云源 author:headsen chen date:2018-04-28  13:33:41 1.备份  mv /etc/yum.repos.d/CentO ...

  8. XMLHttpRequest 对象 status 和statusText 属性对照表

    XMLHttpRequest 对象 status 和statusText 属性对照表 status statusText 说明 0** - 未被始化 1** - 请求收到,继续处理 100 Conti ...

  9. 160624、Spark读取数据库(Mysql)的四种方式讲解

    目前Spark支持四种方式从数据库中读取数据,这里以Mysql为例进行介绍. 一.不指定查询条件 这个方式链接MySql的函数原型是: 1 def jdbc(url: String, table: S ...

  10. phantomjs学习之截图

    1.创建pageload.js文件: pageload.js var page = require('webpage').create(); var address = 'https://www.ba ...