思路:

RT

懒得写了

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=(<<)+,mod=;
int tmp[N],R[N],fac[N],A[N],B[N],C[N],niB[N];
int pow(ll x,ll y){
ll res=;
while(y){
if(y&)res=res*x%mod;
x=x*x%mod,y>>=;
}return (int)res;
}
void NTT(int *a,int n,int f){
int m=,L=;
for(;m<n;m<<=)L++;
for(int i=;i<n;i++)R[i]=(R[i>>]>>)|((i&)<<(L-));
for(int i=;i<n;i++)if(i<R[i])swap(a[i],a[R[i]]);
for(int l=;l<n;l<<=){
int wn=pow(,((mod-)/(l<<)*f+mod-)%(mod-));
for(int j=;j<n;j+=(l<<)){
int w=;
for(int k=;k<l;k++,w=1ll*w*wn%mod){
int x=a[j+k],y=1ll*w*a[j+k+l]%mod;
a[j+k]=(x+y)%mod,a[j+k+l]=(x-y+mod)%mod;
}
}
}
if(f==-){
int ni=pow(n,mod-);
for(int i=;i<n;i++)a[i]=1ll*a[i]*ni%mod;
}
}
void get_inv(int *a,int *b,int n){
if(n==){b[]=pow(a[],mod-);return;}
get_inv(a,b,n>>);
memcpy(tmp,a,sizeof(int)*n);memset(tmp+n,,sizeof(int)*n);
NTT(tmp,n<<,),NTT(b,n<<,);
for(int i=;i<n<<;i++)tmp[i]=((1ll*b[i]*(-1ll*tmp[i]*b[i]%mod))%mod+mod)%mod;
NTT(tmp,n<<,-);
memcpy(b,tmp,sizeof(int)*n);memset(b+n,,sizeof(int)*n);
}
signed main(){
int n,m,i;
scanf("%d",&n);for(m=;m<=n;m<<=);
for(fac[]=,i=;i<=n;i++)fac[i]=1ll*fac[i-]*i%mod;
for(i=;i<=n;i++)B[i]=1ll*pow(,(1ll*i*(i-)/)%(mod-))*pow(fac[i],mod-)%mod;
for(i=;i<=n;i++)C[i]=1ll*pow(,(1ll*i*(i-)/)%(mod-))*pow(fac[i-],mod-)%mod;
get_inv(B,niB,m),NTT(niB,m,);NTT(C,m,);
for(int i=;i<m;i++)A[i]=1ll*niB[i]*C[i]%mod;
NTT(A,m,-);
printf("%lld\n",1ll*A[n]*fac[n-]%mod);
}

BZOJ 3456 NTT图的计数 容斥的更多相关文章

  1. BZOJ 3294: [Cqoi2011]放棋子 计数 + 容斥 + 组合

    比较头疼的计数题. 我们发现,放置一个棋子会使得该棋子所在的1个行和1个列都只能放同种棋子. 定义状态 $f_{i,j,k}$ 表示目前已使用了 $i$ 个行,$j$ 个列,并放置了前 $k$ 种棋子 ...

  2. [CTS2019]珍珠(NTT+生成函数+组合计数+容斥)

    这题72分做法挺显然的(也是我VP的分): 对于n,D<=5000的数据,可以记录f[i][j]表示到第i次随机有j个数字未匹配的方案,直接O(nD)的DP转移即可. 对于D<=300的数 ...

  3. bzoj 2839 集合计数 容斥\广义容斥

    LINK:集合计数 容斥简单题 却引出我对广义容斥的深思. 一直以来我都不理解广义容斥是为什么 在什么情况下使用. 给一张图: 这张图想要表达的意思就是这道题目的意思 而求的东西也和题目一致. 特点: ...

  4. BZOJ.4558.[JLOI2016]方(计数 容斥)

    BZOJ 洛谷 图基本来自这儿. 看到这种计数问题考虑容斥.\(Ans=\) 没有限制的正方形个数 - 以\(i\)为顶点的正方形个数 + 以\(i,j\)为顶点的正方形个数 - 以\(i,j,k\) ...

  5. BZOJ.5407.girls/CF985G. Team Players(三元环计数+容斥)

    题面 传送门(bzoj) 传送门(CF) \(llx\)身边妹子成群,这天他需要从\(n\)个妹子中挑出\(3\)个出去浪,但是妹子之间会有冲突,表现为\(i,j\)之间连有一条边\((i,j)\), ...

  6. BZOJ 4671 异或图 | 线性基 容斥 DFS

    题面 Description 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出现次数之和为 1, 那么边 (u, v) 在 G 中 ...

  7. BZOJ 3812 主旋律 (状压DP+容斥) + NOIP模拟赛 巨神兵(obelisk)(状压DP)

    这道题跟另一道题很像,先看看那道题吧 巨神兵(obelisk) 题面 欧贝利斯克的巨神兵很喜欢有向图,有一天他找到了一张nnn个点mmm条边的有向图.欧贝利斯克认为一个没有环的有向图是优美的,请问这张 ...

  8. bzoj2839: 集合计数 容斥+组合

    2839: 集合计数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 523  Solved: 287[Submit][Status][Discuss] ...

  9. BZOJ.4559.[JLOI2016]成绩比较(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 为什么已经9点了...我写了多久... 求方案数,考虑DP... \(f[i][j]\)表示到第\(i\)门课,还有\(j\)人会被碾压的方案数. 那么\[f[i][j]=\sum_{ ...

随机推荐

  1. linux命令 info

    info命令是Linux下info格式的帮助指令. 就内容来说,info页面比man page编写得要更好.更容易理解,也更友好,但man page使用起来确实要更容易得多.一个man page只有一 ...

  2. 关于js中的事件委托小案例

    需求:页面上有一个按钮,和一个空的ul,要求点击按钮,会给ul中动态添加li元素,然后,点击动态添加的元素,在控制台上输出,这是第几个元素 <ul> </ul> <but ...

  3. [bzoj3012][luogu3065][USACO12DEC][第一!First!] (trie+拓扑排序判环)

    题目描述 Bessie has been playing with strings again. She found that by changing the order of the alphabe ...

  4. [luoguP3146] [USACO16OPEN]248(区间DP)

    传送门 f[i][j]表示区间 i-j 合并的最大值 转移: 若f[i][k] && f[k+1][j] && f[i][k] == f[k+1][j] --> ...

  5. apt-get使用指南

    最近频繁使用apt-cache show(查看软件包详细信息)与apt-cache search(搜寻具体软件包确切名称)命令,深感方便与功能强大.现将一些apt-get相关命令做一个简单的收集: a ...

  6. [bzoj2879][网络流,动态加边]美食节[Noi2012]

    就是bzoj1070的加强版,数据规模扩大了n倍,这样要是一次把所有边都加进去的话就爆炸了,,所以使用单路增广,增广过一条边后在加入下一条边. //By hzwer 1 #include<ios ...

  7. Oracle创建表空间、用户名、密码步骤教程

    第一步,以最高级别 SYSDBA 身份登录数据库 cmd 进入命令行 登录方式一: C:\Documents and Settings\Administrator>sqlplus sys/sys ...

  8. POJ 1861 Network (Kruskal求MST模板题)

    Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 14103   Accepted: 5528   Specia ...

  9. Android怎样保证一个线程最多仅仅能有一个Looper?

    1. 怎样创建Looper? Looper的构造方法为private,所以不能直接使用其构造方法创建. private Looper(boolean quitAllowed) { mQueue = n ...

  10. Cisco VPP(1) 简单介绍

    一.简单介绍 VPP全称Vector Packet Processing.是Cisco2002年开发的商用代码. 2016年2月11号,Linux基金会创建FD.io项目.Cisco将VPP代码的开源 ...