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

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

BZOJ 5306 [HAOI2018] 染色

首先,求出$N$个位置,出现次数恰好为$S$的颜色至少有$K$种。

方案数显然为$a_i=\frac{n!\times (m-i)^{m-i\times s}}{(m-K)!\times (s!)^K}\times C(m,K)$

然后二项式反演一下,得到恰好的数量:$ans_i=\sum\limits_{j=i}^n (-1)^{j-i}\times a_i\times C(j,i)$

然后展开一下就可以得到两个多项式:$A_i=\frac{m!\times n!\times (m-i)^{m-i\times s}}{(m-i)!\times (n-s\times i)!\times (s!)^i},b_i=\frac{(-1)^{m-i}}{(m-i)!}$

然后显然答案方案数就是:$C=A\times B ,ans_i=\frac{C[m+i]}{i!}$

最后加一下权即可!

#include 
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define N 262205#define ll long long#define mod 1004535809int a[N],b[N],w[N],n,m,s,lim,fac[10000005],inv[10000005],ans;int q_pow(int x,int n){int ret=1;for(;n;n>>=1,x=(ll)x*x%mod)if(n&1)ret=(ll)ret*x%mod;return ret;}#define inv(x) q_pow(x,mod-2)void NTT(int *a,int len,int flag){ int i,j,k,t,w,x,tmp; for(i=k=0;i
k)swap(a[i],a[k]); for(j=len>>1;(k^=j)
>=1); } for(k=2;k<=len;k<<=1) { t=k>>1;x=q_pow(3,(mod-1)/k);if(flag==-1)x=inv(x); for(i=0;i

转载于:https://www.cnblogs.com/Winniechen/p/10623368.html

你可能感兴趣的文章
Python-库安装
查看>>
Git笔记
查看>>
普通人如何从平庸到优秀,在到卓越
查看>>
SLAM数据集
查看>>
c#学习笔记05——数组&集合
查看>>
【图论算法】Dijstra&BFS
查看>>
注册和上传文件(头像)
查看>>
使用OVS
查看>>
键盘回收的几种方法
查看>>
Python(条件判断和循环)
查看>>
day4 linux安装python
查看>>
LeetCode Container With Most Water (Two Pointers)
查看>>
vue (v-if show 问题)
查看>>
https基础
查看>>
css3 canvas之刮刮卡效果
查看>>
并查集模板
查看>>
RESTful Mongodb
查看>>
BZOJ3237:[AHOI2013]连通图(线段树分治,并查集)
查看>>
如何提高Ajax性能
查看>>
Android--自定义加载框
查看>>