博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛咕 P4491 [HAOI2018]染色
阅读量:5054 次
发布时间:2019-06-12

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

显然颜色数量不会超过\(lim=\min(m,n/S)\)

考虑容斥,计算恰好出现了\(S\)次的颜色有至少\(i\)种的方案数\(f[i]\),钦定\(i\)种颜色正好放\(S\)

\(m\)种颜色选\(i\)种,所以乘一个\(C_m^i\)

然后这n个位置分成\(i+1\)个部分:被钦定的\(i\)种颜色,每个有\(S\)个;剩下的\(m-i\)种颜色,一共\(n-iS\)个。先看作是可重的全排列数,那么方案就有\(\frac{n!}{(S!)^i(n-iS)!}\)种。前\(i\)各部分都是只有一种颜色,后面部分每个有\(m-i\)种取法,所以还有一个\((m-i)^{n-iS}\)

综上,\(f[i]=C_m^i\cdot \frac{n!}{(S!)^i(n-iS)!}\cdot(m-i)^{n-iS}\)

接下来就是答案,恰好出现了\(S\)次的颜色有正好\(i\)种的方案数\(ans[i]\)

用容斥,\(ans[i]=\sum_{j=i}^{lim}(-1)^{j-i}C_j^if[j]\)

那个组合数很麻烦,拆开

\(ans[i]=\sum_{j=i}^{lim}(-1)^{j-i}\frac{j!}{i!(j-i)!}f[j]\)

\(ans[i]\cdot i!=\sum_{j=i}^{lim}\frac{(-1)^{j-i}}{(j-i)!}f[j]\cdot j!\)

这就可以直接用NTT做了,如果不知道怎么做的可以先写zjoi2014 力

#include
#define il inline#define vd void#define mod 1004535809typedef long long ll;il int gi(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-')f=-1; ch=getchar(); } while(isdigit(ch))x=x*10+ch-'0',ch=getchar(); return x*f;}il int pow(int x,int y){ int ret=1; while(y){ if(y&1)ret=1ll*ret*x%mod; x=1ll*x*x%mod;y>>=1; } return ret;}#define inv(a) pow((a),mod-2)const int G=3,iG=inv(G);int fact[10000001],W[100010];int A[262147],B[262147],rev[262147];il int C(int n,int m){ if(n
i)std::swap(A[rev[i]],A[i]); for(int o=1;o
<<=1){ int W=pow(t?G:iG,(mod-1)/(o<<1)); for(int*p=A;p!=A+n;p+=o<<1) for(int i=0,w=1;i
>1]>>1)|((i&1)<

转载于:https://www.cnblogs.com/xzz_233/p/10076894.html

你可能感兴趣的文章
Java并发编程:线程池的使用
查看>>
Python 的xlutils模块
查看>>
springMVC笔记(四)- 不配置HandlerMapping
查看>>
解决zabbix可用性为灰色状态
查看>>
lemon详细使用方法
查看>>
Windows Server 笔记(七):Windows Server 2012 R2 NIC Teaming(NIC组)
查看>>
3.window窗口
查看>>
SQL Link Oracle
查看>>
bzoj 1007: [HNOI2008]水平可见直线 半平面交
查看>>
2017-02-26
查看>>
使用cookie实现只出现一次的广告代码效果
查看>>
Android网络通信框架---Volley
查看>>
浅谈animation里的forwards
查看>>
事件的节流(throttle)与防抖(debounce)
查看>>
07_ddms透视图介绍
查看>>
python初步学习-python模块之 logging
查看>>
Molas——.NET依赖分离框架
查看>>
静态页面传值
查看>>
智能手持终端方案
查看>>
基于visual Studio2013解决C语言竞赛题之0408素数
查看>>