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 <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <iostream>
#include <bitset>
using namespace std;
#define N 262205
#define ll long long
#define mod 1004535809
int 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<len;i++)
{
if(i>k)swap(a[i],a[k]);
for(j=len>>1;(k^=j)<j;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<len;i+=k)
for(j=i,w=1;j<i+t;j++)
{
tmp=(ll)w*a[j+t]%mod;
a[j+t]=(a[j]-tmp+mod)%mod;
a[j]=(a[j]+tmp)%mod;w=(ll)w*x%mod;
}
}if(flag==-1)for(i=0,t=inv(len);i<len;i++)a[i]=(ll)a[i]*t%mod;
}
void init()
{
int lim=max(n,m);fac[0]=1;
for(int i=1;i<=lim;i++)fac[i]=(ll)i*fac[i-1]%mod;inv[lim]=q_pow(fac[lim],mod-2);
for(int i=lim;i;i--)inv[i-1]=(ll)i*inv[i]%mod;
lim=min(m,n/s);
for(int i=0;i<=lim;i++)a[i]=(ll)fac[m]*inv[m-i]%mod*fac[n]%mod*inv[n-s*i]%mod*q_pow(inv[s],i)%mod*q_pow(m-i,n-i*s)%mod;
for(int i=0;i<=m;i++)
if((m-i)&1)b[i]=mod-inv[m-i];
else b[i]=inv[m-i];
}
int main()
{
scanf("%d%d%d",&n,&m,&s);init();
for(int i=0;i<=m;i++)scanf("%d",&w[i]);
int len=1;while(len<=(m<<1))len<<=1;
NTT(a,len,1);NTT(b,len,1);for(int i=0;i<len;i++)a[i]=(ll)a[i]*b[i]%mod;NTT(a,len,-1);
for(int i=0;i<=m;i++)ans=(ans+(ll)w[i]*a[m+i]%mod*inv[i])%mod;
printf("%d\n",ans);
}

BZOJ 5306 [HAOI2018] 染色的更多相关文章

  1. BZOJ 5306: [Haoi2018]染色 二项式反演+NTT

    给定长度为 $n$ 的序列, 每个位置都可以被染成 $m$ 种颜色中的某一种. 如果恰好出现了 $s$ 次的颜色有 $k$ 种, 则会产生 $w_{k}$ 的价值. 求对于所有可能的染色方案,获得价值 ...

  2. 【BZOJ5306】 [Haoi2018]染色

    BZOJ5306 [Haoi2018]染色 Solution xzz的博客 代码实现 #include<stdio.h> #include<stdlib.h> #include ...

  3. [洛谷P4491] [HAOI2018]染色

    洛谷题目链接:[HAOI2018]染色 题目背景 HAOI2018 Round2 第二题 题目描述 为了报答小 C 的苹果, 小 G 打算送给热爱美术的小 C 一块画布, 这块画布可 以抽象为一个长度 ...

  4. Luogu 4491 [HAOI2018]染色

    BZOJ 5306 考虑计算恰好出现$s$次的颜色有$k$种的方案数. 首先可以设$lim = min(m, \left \lfloor \frac{n}{s} \right \rfloor)$,我们 ...

  5. 【LG4491】[HAOI2018]染色

    [LG4491][HAOI2018]染色 题面 洛谷 题解 颜色的数量不超过\(lim=min(m,\frac nS)\) 考虑容斥,计算恰好出现\(S\)次的颜色至少\(i\)种的方案数\(f[i] ...

  6. bzoj 5393 [HAOI2018] 反色游戏

    bzoj 5393 [HAOI2018] 反色游戏 Link Solution 最简单的性质:如果一个连通块黑点个数是奇数个,那么就是零(每次只能改变 \(0/2\) 个黑点) 所以我们只考虑偶数个黑 ...

  7. [BZOJ5306] [HAOI2018]染色(容斥原理+NTT)

    [BZOJ5306] [HAOI2018]染色(容斥原理+NTT) 题面 一个长度为 n的序列, 每个位置都可以被染成 m种颜色中的某一种. 如果n个位置中恰好出现了 S次的颜色有 K种, 则小 C ...

  8. 【题解】[HAOI2018]染色(NTT+容斥/二项式反演)

    [题解][HAOI2018]染色(NTT+容斥/二项式反演) 可以直接写出式子: \[ f(x)={m \choose x}n!{(\dfrac 1 {(Sx)!})}^x(m-x)^{n-Sx}\d ...

  9. BZOJ 2243: [SDOI2011]染色 [树链剖分]

    2243: [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6651  Solved: 2432[Submit][Status ...

随机推荐

  1. 16.Odoo产品分析 (二) – 商业板块(9) – 网站生成器(1)

    查看Odoo产品分析系列--目录 安装"电子商务"模块时,该模块会自动安装,但网站生成器是电子商务的前提,因此,先分析该模块,在下面就是对电子商务模块的分析. 1. 编辑网站 安装 ...

  2. 更新 Anaconda 库文件

    查看库 Anaconda Navigator中 启动Anaconda Prompt(或Anaconda Navigator中Environment->(base)root->Open te ...

  3. 章节七、1-ArrayList

    一.集合是一个容器,前面讲的数值也是一个容器, 它们的区别是: 1.数组既可以存储基本数据类型,又可以存储引用数据类型,而集合只能存储引用数据类型,也就是对象. 2.基本数据类型存储的是值,引用数据类 ...

  4. 扩展Linux磁盘空间

    适用于虚拟机内系统HyperV/Centos7已测 先为虚拟磁盘扩容,比如10G加到20G 最好进入单用户模式:init 1 进入管理UI:fdisk -l /dev/sda依次n {new part ...

  5. c++屏蔽Win10系统快捷键

    很久之前实现的功能,也是参考其他人的实现,时间太久,具体参考哪里已经记不得了. 这里不仅能屏蔽一般的快捷键,还可以屏蔽ctrl+atl+del. ; HHOOK keyHook = NULL; HHO ...

  6. Win10更新

    Turn: https://m.uczzd.cn/webview/news?app=meizubrw-iflow&aid=11529477703533248224&cid=100&am ...

  7. 使用IEDriverServer.exe驱动IE11,实现自动化测试

            +  下载IEDriverServer   http://dl.pconline.com.cn/download/771640-1.html 解压缩得到IEDriverServer.e ...

  8. MySQL Innodb数据库误删ibdata1后MySQL数据库的恢复案例

      上周,以前公司的同事朋友找我帮忙,看看能否帮忙恢复一个MySQL 数据库,具体情况为:数据库版本为MySQL 5.6(具体版本不清楚),也不清楚具体的数据库引擎; 没有数据库备份,只剩下数据库下面 ...

  9. 如何在HTTP客户端与服务器端之间保持状态(转)

    HTTP协议与状态保持 HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都 ...

  10. sql语句中的join用法(可视化解释)

    一.innerjoin innerjoin总结来说就是 ,如A知道通往B如何走:B知道通往C如何走:但是A不知道通往C如何走,但是A可以通过B获得去往C的通往方式.. 首先,假设有A,B两张表,结构及 ...