博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HEOI2016/TJOI2016]求和——第二类斯特林数
阅读量:6543 次
发布时间:2019-06-24

本文共 1286 字,大约阅读时间需要 4 分钟。

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

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

直接拆开,消一消阶乘

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

往NTT方向靠拢

然后大功告成

 

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

后面都是套路了。

#include
#define reg register int#define il inline#define numb (ch^'0')#define int long longusing namespace std;typedef long long ll;il void rd(int &x){ char ch;x=0;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x);}namespace Miracle{const int N=100000+5;const int mod=998244353;const int G=3;const int GI=332748118;ll qm(ll x,ll y){ ll ret=1; while(y){ if(y&1) ret=ret*x%mod; x=x*x%mod; y>>=1; }return ret;}int rev[4*N];ll a[4*N],b[4*N];int n;void NTT(ll *f,int c){ for(reg i=0;i
=1;--i) inv[i]=inv[i+1]*(i+1)%mod; for(reg i=1;i<=n;++i) ni[i]=((mod-mod/i)*ni[mod%i]+mod)%mod; for(reg i=0;i<=n;++i){ if(i&1) a[i]=mod-inv[i]; else a[i]=inv[i]; if(i==1) b[i]=n+1; else if(i==0) b[i]=1; else b[i]=(qm(i,n+1)-1+mod)%mod*qm(i-1,mod-2)%mod*inv[i]%mod; } int m; int lp=n; for(m=n+n,n=1;n<=m;n<<=1); for(reg i=0;i
>1]>>1)|((i&1)?n>>1:0); }// for(reg i=0;i

 

转载于:https://www.cnblogs.com/Miracevin/p/10197836.html

你可能感兴趣的文章
phpHiveAdmin是如何通过Hive/Hadoop工作的
查看>>
双向链表内结点的删除(4)
查看>>
项目总结
查看>>
JSON字符串转成对象
查看>>
SaltStack 中ZMQ升级
查看>>
grep,egrep使用以及正则表达式的使用
查看>>
implode 和 explode
查看>>
gzip the js and css
查看>>
exchange 2013 提示“HTTP 500内部服务器错误”
查看>>
Linux运维学习笔记之一:运维的原则和学习方法
查看>>
怎样使用原型设计中的组件样式功能
查看>>
python threading
查看>>
谷安天下2013年6月CISA考前辅导 第一季
查看>>
ARM程序规范
查看>>
深深的爱,静静的想
查看>>
LNMP环境出现502 Bad Gateway报错
查看>>
我的友情链接
查看>>
Qt下的OpenGL 编程(8)文字、FPS、动画
查看>>
关于Thread对象的suspend,resume,stop方法
查看>>
linux下IPTABLES配置详解
查看>>