传送门

这题太珂怕了……如果是我的话完全想不出来……

题解

 //minamoto
#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
#define swap(x,y) (x^=y,y^=x,x^=y)
#define mul(x,y) (1ll*(x)*(y)%P)
#define add(x,y) (x+y>=P?x+y-P:x+y)
#define dec(x,y) (x-y<0?x-y+P:x-y)
using namespace std;
const int N=,P=;
inline int ksm(int a,ll b){
int res=;
while(b){
if(b&) res=mul(res,a);
a=mul(a,a),b>>=;
}
return res;
}
int n,r[N],A[N],B[N],fac[N],finv[N],O[N],C[N],F[N],G[N];
inline void init(){
fac[]=fac[]=finv[]=;
for(int i=;i<=n;++i) fac[i]=mul(fac[i-],i);
finv[n]=ksm(fac[n],P-);
for(int i=n-;i;--i) finv[i]=mul(finv[i+],i+);
}
void NTT(int *A,int type,int len){
int limit=,l=;
while(limit<len) limit<<=,++l;
for(int i=;i<limit;++i)
r[i]=(r[i>>]>>)|((i&)<<(l-));
for(int i=;i<limit;++i)
if(i<r[i]) swap(A[i],A[r[i]]);
for(int mid=;mid<limit;mid<<=){
int R=mid<<,Wn=ksm(,(P-)/R);O[]=;
for(int j=;j<mid;++j) O[j]=mul(O[j-],Wn);
for(int j=;j<limit;j+=R){
for(int k=;k<mid;++k){
int x=A[j+k],y=mul(O[k],A[j+k+mid]);
A[j+k]=add(x,y),A[j+k+mid]=dec(x,y);
}
}
}
if(type==-){
reverse(A+,A+limit);
for(int i=,inv=ksm(limit,P-);i<limit;++i)
A[i]=mul(A[i],inv);
}
}
void Inv(int *a,int *b,int len){
if(len==) return (void)(b[]=ksm(a[],P-));
Inv(a,b,len>>);
for(int i=;i<len;++i) F[i]=a[i],G[i]=b[i];
NTT(F,,len<<),NTT(G,,len<<);
for(int i=;i<(len<<);++i)
F[i]=mul(mul(F[i],G[i]),G[i]);
NTT(F,-,len<<);
for(int i=;i<len;++i) b[i]=(1ll*(b[i]<<)%P+P-F[i])%P;
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d",&n);init();
int len=;for(len=;len<=(n*);len<<=);
A[]=;
for(int i=;i<=n;++i) A[i]=mul(ksm(,1ll*i*(i-)/),finv[i]);
Inv(A,B,len);
for(int i=;i<=n;++i) C[i]=mul(ksm(,1ll*i*(i-)/),finv[i-]);
NTT(B,,len),NTT(C,,len);
for(int i=;i<len;++i) B[i]=mul(B[i],C[i]);
NTT(B,-,len);
printf("%d\n",mul(B[n],fac[n-]));
return ;
}

最新文章

  1. int unsigned实验
  2. ccc 设置图片位置
  3. it&#39;s hard to say
  4. javaWEB国际化(jsp中使用)
  5. JMP软件中的晶圆图( Wafer Map)分析
  6. POJ 2524 并查集
  7. svn回滚版本2
  8. Docker私有仓库1
  9. Django:之安全、国际化和session
  10. onclick与this
  11. IO模式和IO多路复用
  12. 软件工程个人作业四--alpha阶段个人总结
  13. js中slice splice substring substr区别
  14. thrift学习总结
  15. node.js浅谈
  16. 20145310《网络对抗》Exp9 Web安全基础实践
  17. asp.net core 2.1 增加Nlog日志到sql server数据库
  18. 并发系列(三)-----volatile
  19. bitcoin PoW原理及区块创建过程
  20. DenseNet笔记

热门文章

  1. 【转载】C#调用国家气象局天气预报接口
  2. 【转载】5种网络IO模型
  3. Intel Naming Strategy--2
  4. HDU 1248 寒冰王座 (水题的N种做法!)(含完全背包)
  5. Java多线程面试题归纳
  6. 混合minxins
  7. ArcGIS 10.3 for Server新特性介绍
  8. Linux环境下如何查找哪个线程使用CPU最长
  9. openwrt gstreamer实例学习笔记(五. gstreamer BUS)
  10. TButton.Repaint的执行过程