正题

题目链接:https://www.luogu.com.cn/problem/P4491


题目大意

给nnn个物品染上mmm种颜色,若恰好有kkk个颜色的物品个数为SSS那么就会产生WkW_kWk​的贡献。求所有染色方案的贡献和

1≤n≤107,1≤m≤105,1≤S≤1501\leq n\leq 10^7,1\leq m\leq 10^5,1\leq S\leq 1501≤n≤107,1≤m≤105,1≤S≤150


解题思路

先考虑一个简单的想法,我们强制染上kkk种颜色,那么方案就是
F(k)=(mk)Pnk×S(S!)k(m−k)n−k×SF(k)=\binom{m}{k}\frac{P_n^{k\times S}}{(S!)^k}(m-k)^{n-k\times S}F(k)=(km​)(S!)kPnk×S​​(m−k)n−k×S
(选出kkk种,然后重排公式,剩下的随便选)

发现这样剩下的颜色也有可能会有贡献,设G(k)G(k)G(k)表示恰好有kkk种出现次数为SSS的颜色的话,那么他们之间有公式
F(k)=∑i=kn(ik)G(i)F(k)=\sum_{i=k}^n\binom{i}{k}G(i)F(k)=i=k∑n​(ki​)G(i)
然后直接二项式反演就有
⇒G(k)=∑i=kn(−1)i−k(ik)F(i)\Rightarrow G(k)=\sum_{i=k}^n(-1)^{i-k}\binom{i}{k}F(i)⇒G(k)=i=k∑n​(−1)i−k(ki​)F(i)
拆开组合数就有
G(k)=∑i=kn(−1)i−ki!k!(i−k)!F(i)G(k)=\sum_{i=k}^n(-1)^{i-k}\frac{i!}{k!(i-k)!}F(i)G(k)=i=k∑n​(−1)i−kk!(i−k)!i!​F(i)
这里面和iii有关的下标只有iii和i−ki-ki−k,是一个卷积的形式,直接NTTNTTNTT就好了。

时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)

当然也可以用指数型生成函数来推导,但是我不会


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e7+10,P=1004535809;
ll n,m,S,ans,inv[N],fac[N],f[N],g[N],r[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
void NTT(ll *f,ll n,ll op){for(ll i=0;i<n;i++)if(i<r[i])swap(f[i],f[r[i]]);for(ll p=2;p<=n;p<<=1){ll len=(p>>1),tmp=power(3,(P-1)/p);if(op==-1)tmp=power(tmp,P-2);for(ll k=0;k<n;k+=p){ll buf=1;for(ll i=k;i<k+len;i++){ll tt=buf*f[i+len]%P;f[i+len]=(f[i]-tt+P)%P;f[i]=(f[i]+tt)%P;buf=buf*tmp%P;}}}if(op==-1){ll invn=power(n,P-2);for(ll i=0;i<n;i++)f[i]=f[i]*invn%P;}return;
}
ll C(ll n,ll m)
{return fac[n]*inv[m]%P*inv[n-m]%P;}
signed main()
{scanf("%lld%lld%lld",&n,&m,&S);inv[1]=1;for(ll i=2;i<N;i++)inv[i]=P-(P/i)*inv[P%i]%P;inv[0]=fac[0]=1;ll pm=m;m=min(m,n/S);for(ll i=1;i<N;i++)fac[i]=fac[i-1]*i%P,inv[i]=inv[i-1]*inv[i]%P;for(ll i=0,z=1;i<=m;i++){f[i]=C(pm,i)*fac[n]%P*z%P*inv[n-i*S]%P;f[i]=f[i]*power(pm-i,n-i*S)%P;z=z*inv[S]%P;f[i]=f[i]*fac[i]%P;}for(ll i=0;i<=m;i++)g[i]=(i&1)?(P-inv[i]):(inv[i]);reverse(f,f+1+m);ll l=1;while(l<=2*m+1)l<<=1;for(ll i=0;i<l;i++)r[i]=(r[i>>1]>>1)|((i&1)?(l>>1):0);NTT(f,l,1);NTT(g,l,1);for(ll i=0;i<l;i++)f[i]=f[i]*g[i]%P;NTT(f,l,-1);reverse(f,f+1+m);for(ll i=0;i<=m;i++){ll p=f[i]*inv[i]%P;ll w;scanf("%lld",&w);(ans+=w*p%P)%=P;}printf("%lld\n",ans);return 0;
}

P4491-[HAOI2018]染色【二项式反演,NTT】相关推荐

  1. [HAOI2018] 染色(二项式反演+NTT)

    洛谷链接 显然颜色数量不会超过 lim⁡=min⁡(m,ns)\lim=\min(m,\frac ns)lim=min(m,sn​) fi:f_i:fi​: 至少有 iii 种颜色恰好出现了 sss ...

  2. P4491 [HAOI2018]染色

    反思 二项式反演的板子,但是还要加上一个NTT,就变得恶心人了 我NTT写挂调了好长时间... 注意 NTT应该这么写 int tmp=pow((opt)?invG:G,(MOD-1)/i); 而不这 ...

  3. 【HAOI2018】染色【反向二项式反演】【NTT卷积】

    传送门 题意:NNN个位置染MMM种颜色,恰好出现SSS次的颜色数量恰好为kkk时的愉悦度为wkw_kwk​,求所有方案的愉悦度之和.对100453580910045358091004535809取模 ...

  4. [2021.1.27多校省选模拟10]染色(min-max容斥/二项式反演)

    [2021.1.27多校省选模拟10]染色 突然发现我对概率期望的理解不是很好... 部分分1:可以直接进行状压dp,然后按照题意模拟即可. 部分分2:首先可以发现这个问题是min_max容斥形式,然 ...

  5. 【UOJ574】多线程计算【二元二项式反演】【定积分】【矩阵】【NTT 卷积】

    题意:有 n×mn\times mn×m 的网格,每个结点在 [0,1)[0,1)[0,1) 内的一个随机时刻被点亮.有 hhh 个数对 xi,yix_i,y_ixi​,yi​,对于一个瞬间状态,如果 ...

  6. 二项式反演(非详细)

    引入 二项式反演又名广义容斥定理 二项式反演可以表示成: f[n]=∑i=0n(−1)iCnigi⟺gn=∑i=0n(−1)iCnif[i]f[n]=\sum_{i=0}^n(-1)^iC_{n}^{ ...

  7. Luogu 4491 [HAOI2018]染色

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

  8. 洛谷·幼儿园篮球题【including范德蒙德卷积,二项式反演

    初见安~时隔良久我又回来写多项式了[靠 还是放在题目前面吧,简单讲一下这两个东西. 一.范德蒙德卷积 可以理解为:在两个有n个石子和m个石子的堆里面共选k个石子的方案数.这样这个等式的成立就很显然了. ...

  9. 二项式反演中至少与恰好的转换的问题

    有关二项式反演的东西中较难理解的是至少与恰好的转换,其余的一些东西都比较好说, 先说一个结论,把至少问题转换为恰好来做并不是存在至少与恰好就行的,因为利用二项式反演把至少与恰好转换有时候并不一定是对的 ...

最新文章

  1. 项目4---罗列并解释阿里云服务的存储产品
  2. ITK:均值滤波的图像
  3. PollardRho大整数分解
  4. 通过Socket实现文件上传/上传文件
  5. 快速简易封装歌词文件
  6. python下载微信公众号文章_python下载微信公众号相关文章
  7. 软件架构之“道”和“术”哲学思考
  8. Python爬虫 爬取dota2官网英雄缺少英雄
  9. WiFi远程监控,监控摄像头只有在WiFi环境才能使用吗
  10. Notepad++实用插件整理(Json Viewer、Compare、Explorer、AnalysePlugin)
  11. String,无所不在的数据类型
  12. Sprite的一些有趣的现象
  13. 计算机应用研究、计算机工程与应用、计算机科学与探索投稿经验
  14. 一键修复共享服务器权限问题
  15. OAuth 2.0--开放网络标准
  16. ZooKeeper面试题(2020最新版,springmvc源码分析pdf百度云
  17. 我是一个苹果专卖店的
  18. 【oracle作业5】PL/SQL应用
  19. 迷宫城堡——Tarjan
  20. MySQL导入数据,存在外键约束不能导入数据的处理方式

热门文章

  1. sql语句ding_mybatis plus 写sql语句
  2. 润乾报表分组求和_实现报表数据预先计算
  3. 奥的斯服务器状态显示,奥的斯电梯调试服务器(俗称st)按键介绍
  4. 帆软获取上月的第一天与最后一天_《原神》岩港打工第一天怎么玩 岩港打工第一天玩法攻略...
  5. 布斯乘法以及带符号数的运算
  6. [蓝桥杯2018决赛]三角形面积-数论
  7. 算法-找出最近点对问题
  8. python通过tkinter界面库实现三角形成立的测试
  9. Python import以及os模块
  10. [蓝桥杯2016初赛]方格填数