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. Testlink1.9.17使用方法(第六章 测试计划制定)

    第六章 测试计划制定 QQ交流群:585499566 在TestLink系统中,一个完整的测试计划包括:集成测试阶段.系统测试阶段. 一. 创建测试计划 1,点击主页上[测试计划管理] 2,在“测试计 ...

  2. GitHub Flow & Git Flow 基于Git 的两种协作开发模式

    介绍基于Git 两种协作开发模式,GitHub Flow & Git Flow 对于Github 一些好用的特殊操作技巧 ,可以见GitHub 特殊操作技巧 和Git的基本操作 一 GitHu ...

  3. 计算机图形学(第2版 于万波 于硕 编著)第45页的Bresenham算法有错误

    计算机图形学(第2版 于万波 于硕 编著)第45页的Bresenham算法有错误: 书上本来要写的是以x为阶越步长的方法,但是他写的是用一部分y为阶越步长的方法(其实也写的不对),最后以x为阶越步长的 ...

  4. Multiple Server Query Execution报The result set could not be merged..

    在SQL Server中使用Multiple Server Query Execution这个功能做数据库维护或脚本发布时非常方便,昨天由于磁盘空间原因,删除清理了大量的软件和组件,结果导致SSMS客 ...

  5. mssql sqlserver 模拟for循环的写法

    转自:http://www.maomao365.com/?p=6567 摘要: 下文讲述sql脚本模拟for循环的写法,如下所示: /* for样例 for('初始值','条件','执行后自增') 通 ...

  6. web前端(6)—— 标签的属性,分类,嵌套

    属性 HTML标签可以设置属性,属性一般以键值对的方式写在开始标签中 1.HTML标签除一些特定属性外可以设置自定义属性,一个标签可以设置多个属性用空格分隔,多个属性不区分先后顺序. 2.属性值要用引 ...

  7. 孟岩:通证(token)和通证经济的目的在于改善现有经济的效率性

    孟岩是最早将token翻译成为通证的区块链大咖,这个翻译已经得到到了越来越人的认可.原来它叫代币,孟岩建议把它翻译成通证.以下是孟岩关于通证的注解. (孟岩,柏链道捷CEO,CSDN副总裁,区块链通证 ...

  8. NPOI导入导出Excel工具类

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Ref ...

  9. python3 requests + BeautifulSoup 爬取阳光网投诉贴详情实例代码

    用到了requests.BeautifulSoup.urllib等,具体代码如下. # -*- coding: utf-8 -*- """ Created on Sat ...

  10. Linux实时查询GPU使用命令

    查看显存使用情况的命令: $ nvidia-smi 周期性地查看GPU使用情况则使用命令: $ watch -n nvidia-smi 其中数字10表示每十秒刷新一次GPU使用状态. 具体如下所示:重 ...