题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555

第二类斯特林数展开式:

\( S(i,j) = \frac{1}{j!} \sum\limits_{k=0}^{j}(-1)^{k}C_{j}^{k}(j-k)^{i} \)

大概是容斥枚举空的盒子个数。https://www.cnblogs.com/gzy-cjoier/p/8426987.html

在这道题里,先把 j 提到前面,再把组合数展开,推一推式子发现 j 之后的那部分是卷积的形式。就能 O( nlogn + n )了。

别把 >>1 写成 <<1 !!!!!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=1e5+,M=(<<)+,mod=;
int n,len,r[M],a[M],b[M],ans,jcn[N];
void upd(int &x){x>=mod?x-=mod:;x<?x+=mod:;}
int pw(int x,int k)
{int ret=;while(k){if(k&)ret=(ll)ret*x%mod;x=(ll)x*x%mod;k>>=;}return ret;}
void ntt(int *a,bool fx)
{
for(int i=;i<len;i++)
if(i<r[i])swap(a[i],a[r[i]]);
for(int R=;R<=len;R<<=)
{
int Wn=pw( ,fx?(mod-)-(mod-)/R:(mod-)/R );
for(int i=,m=R>>;i<len;i+=R)
for(int j=,w=;j<m;j++,w=(ll)w*Wn%mod)
{
int x=a[i+j], y=(ll)w*a[i+m+j]%mod;
a[i+j]=x+y; upd(a[i+j]);
a[i+m+j]=x+mod-y; upd(a[i+m+j]);
}
}
if(!fx)return ; int inv=pw(len,mod-);
for(int i=;i<len;i++)a[i]=(ll)a[i]*inv%mod;
}
int main()
{
scanf("%d",&n);
jcn[]=;for(int i=;i<=n;i++)jcn[i]=(ll)jcn[i-]*i%mod;
jcn[n]=pw(jcn[n],mod-); for(int i=n-;i>=;i--)jcn[i]=(ll)jcn[i+]*(i+)%mod;
for(int i=,fx=;i<=n;i++,fx=-fx)
{
a[i]=fx*jcn[i]+mod;upd(a[i]);
}
for(int i=;i<=n;i++)
{
int k=-i;
if(!k)
{
b[i]=(ll)(n+)*jcn[i]%mod;
}
else
{
int d=pw(i,n+);
if(k<)k+=mod; k=pw(k,mod-);
b[i]=(ll)(+mod-d)*k%mod*jcn[i]%mod;
}
}
for(len=;len<=n<<;len<<=);
for(int i=;i<len;i++)r[i]=(r[i>>]>>)+((i&)?len>>:);//len>>1!! not <<1
ntt(a,); ntt(b,);
for(int i=;i<len;i++)a[i]=(ll)a[i]*b[i]%mod;
ntt(a,);
for(int i=,jc=,lj=;i<=n;i++,jc=(ll)jc*i%mod,lj<<=,upd(lj))
ans=(ans+(ll)lj*jc%mod*a[i])%mod;
printf("%d\n",ans);
return ;
}

最新文章

  1. fsr
  2. C语言 遍历流程 变量生命周期
  3. static 使用要注意的地方
  4. win7下给右键菜单添加启动cmd命令
  5. C#_wpf_userinput_数据绑定_后台对象改变,界面数据也变化
  6. linux(边压缩边传输边解压)
  7. Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
  8. ThinkPHP 3.1.2 视图-1
  9. JSPatch技术文档
  10. svn checkout The XML response contains invalid XML
  11. SSH的软链接后门
  12. java 调用 api接口
  13. Ajax入门例子
  14. UVALive 4850 Installations 贪心
  15. FTP 错误1
  16. Python学习--Selenium模块学习(2)
  17. PAT 1066. Root of AVL Tree (25)
  18. 2. React组件的生命周期
  19. bzoj4561: [JLoi2016]圆的异或并 圆的扫描线
  20. 如何使用Java Enum

热门文章

  1. GIT生成 SSH Key步骤
  2. 近年现场比赛补题(From 2013 to 2018)[持续更新]
  3. orecle触发器
  4. LVS+Keepalived+Tomcat实现高可用性及均衡负载
  5. 编写一个程序,将 d:\java 目录下的所有.java 文件复制到 d:\jad 目录下,并将原来文件的扩展名从.java 改为.jad。
  6. NVMe到底是什么?用它的SSD有啥优势?
  7. Tomcat中HTTP与AJP区别
  8. 51nod-1259-分块+dp
  9. 探究platform_driver中“多态”思想
  10. S5PV210启动过程详解1