给你斯特林数就换成通项公式,给你k次方就换成斯特林数

考虑换成通项公式之后,组合数没有什么好的处理方法

直接拆开,消一消阶乘

然后就发现了(j-k)和k!

往NTT方向靠拢

然后大功告成

其实只要想到把斯特林公式换成通项公式,考虑用NTT优化掉(j-k)^i

后面都是套路了。

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define numb (ch^'0')
#define int long long
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=+;
const int mod=;
const int G=;
const int GI=;
ll qm(ll x,ll y){
ll ret=;
while(y){
if(y&) ret=ret*x%mod;
x=x*x%mod;
y>>=;
}return ret;
}
int rev[*N];
ll a[*N],b[*N];
int n;
void NTT(ll *f,int c){
for(reg i=;i<n;++i){
if(rev[i]<i) swap(f[i],f[rev[i]]);
}
for(reg p=;p<=n;p<<=){
ll gen;
if(c==) gen=qm(G,(mod-)/p);
else gen=qm(GI,(mod-)/p);
int len=p/;
for(reg l=;l<n;l+=p){
ll buf=;
for(reg k=l;k<l+len;++k){
ll tmp=f[k+len]*buf%mod;
f[k+len]=(f[k]-tmp+mod)%mod;
f[k]=(f[k]+tmp)%mod;
buf=buf*gen%mod;
}
}
}
}
ll jie[N],inv[N],ni[N];
int main(){
rd(n);jie[]=;
for(reg i=;i<=n;++i) jie[i]=jie[i-]*i%mod;
inv[n]=qm(jie[n],mod-);inv[]=;
for(reg i=n-;i>=;--i) inv[i]=inv[i+]*(i+)%mod;
for(reg i=;i<=n;++i) ni[i]=((mod-mod/i)*ni[mod%i]+mod)%mod;
for(reg i=;i<=n;++i){
if(i&) a[i]=mod-inv[i];
else a[i]=inv[i];
if(i==) b[i]=n+;
else if(i==) b[i]=;
else b[i]=(qm(i,n+)-+mod)%mod*qm(i-,mod-)%mod*inv[i]%mod;
}
int m;
int lp=n;
for(m=n+n,n=;n<=m;n<<=);
for(reg i=;i<n;++i){
rev[i]=(rev[i>>]>>)|((i&)?n>>:);
}
// for(reg i=0;i<n;++i){
// cout<<a[i]<<" ";
// }cout<<endl;
// for(reg i=0;i<n;++i){
// cout<<b[i]<<" ";
// }cout<<endl; NTT(a,);NTT(b,);
for(reg i=;i<n;++i) b[i]=(ll)b[i]*a[i]%mod;
NTT(b,-);ll yuan=qm(n,mod-);
for(reg i=;i<n;++i) b[i]=b[i]*yuan%mod;
ll ans=;
for(reg j=;j<=lp;++j){
// cout<<" bj "<<j<<" : "<<b[j]<<endl;
ans=(ans+qm(,j)*jie[j]%mod*b[j]%mod)%mod;
//cout<<" ans "<<ans<<endl;
}
printf("%lld",ans);
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2018/12/28 21:51:13
*/

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

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

    题目 [HEOI2016/TJOI2016]求和 关于斯特林数与反演的更多姿势\(\Longrightarrow\)点这里 做法 \[\begin{aligned}\\ Ans&=\sum\l ...

  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. ubuntn 安装软件

    安装输入法 一.Ctrl+Alt+T打开终端,输入sudo apt-get install fcitx,安装fcitx插件. 二.打开input method,选择fcitx. 三.打开system ...

  2. python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for

    也愿大家永葆初心-- 已识乾坤大,犹怜草木青. 一.python简介 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算 ...

  3. Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP

    题目: 给定n(1≤n≤24)个物品,重量分别为wi,装进一些容量为S(S<1e8)的背包,最少需要多少个背包?

  4. 如何让QT程序以管理员权限运行(UAC)

    方案一:(仅适用于使用msvc编译器) 在PRO文件中添加一行指令即可, QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator' ...

  5. Buy the Ticket HDU 1133 卡特兰数应用+Java大数

    Problem Description The "Harry Potter and the Goblet of Fire" will be on show in the next ...

  6. C++ STL 优先队列 priority_queue 详解(转)

    转自https://blog.csdn.net/c20182030/article/details/70757660,感谢大佬. 优先队列 引入 优先队列是一种特殊的队列,在学习堆排序的时候就有所了解 ...

  7. Scrum立会报告+燃尽图(十月十七日总第八次):分配Alpha阶段任务

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...

  8. scrum立会报告+燃尽图(第三周第六次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2286 项目地址:https://coding.net/u/wuyy694 ...

  9. unknown2

    结对作业 本次结对:211606457 郑沐榕.211406242 杨长元 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时( ...

  10. YQCB冲刺周第三天

    团队讨论照片 今天的任务为实现由用户记录一条数据,向数据库中添加一条数据. 遇到的问题为获取单选框.下拉菜单的参数.