[BZOJ4665] 小w的喜糖 题解
我们先假设同种糖间存在差异。
设 \(f_{i,j}\) 表示前 \(i\) 种糖至少有 \(j\) 人拿到的糖和原来一样,\(c_i\) 表示拿第 \(i\) 种糖的人的个数,则有:
\]
设 \(g_i\) 表示所有人中恰好有 \(i\) 人拿到的糖和原来一样,根据二项式反演得:
\]
发现所求即为 \(g_0=\sum\limits_{j=0}^n(-1)^jf_{m,j}\),但是同种糖差异问题仍未解决。实际上同种糖间存在差异相当于给不存在差异的情况 \(\times\prod c_i!\),给 \(g_0\) 除掉就可以了。
时间复杂度 \(O(n^2)\)。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2005,p=1e9+9;
int n,sum,c[N],f[N][N],jc[N],inv[N];
int qpow(int x,int y){
int re=1;
while(y){
if(y&1) re=re*x%p;
x=x*x%p,y>>=1;
}return re;
}int C(int x,int y){
return jc[x]*inv[y]%p*inv[x-y]%p;
}int A(int x,int y){
return jc[x]*inv[x-y]%p;
}signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n,jc[0]=inv[0]=1;
for(int i=1,x;i<=n;i++) cin>>x,c[x]++;
for(int i=1;i<=n;i++) jc[i]=jc[i-1]*i%p;
inv[n]=qpow(jc[n],p-2),f[0][0]=1;
for(int i=n-1;i;i--) inv[i]=inv[i+1]*(i+1)%p;
for(int i=1,sum=c[1];i<=n;i++,sum+=c[i])
for(int j=0;j<=c[i];j++) for(int k=j;k<=sum;k++)
f[i][k]=(f[i][k]+f[i-1][k-j]*C(c[i],j)%p*A(c[i],j))%p;
for(int i=0;i<=n;i++)
sum=(sum+(1-i%2*2)*f[n][i]*jc[n-i])%p;
for(int i=1;i<=n;i++)
sum=sum*inv[c[i]]%p;
cout<<(sum+p)%p;
return 0;
}
[BZOJ4665] 小w的喜糖 题解的更多相关文章
- [bzoj4665]小w的喜糖_二项式反演
小w的喜糖 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4665 数据范围:略. 题解: 二项式反演裸题. $f_{i,j}$表示,前$i$种钦 ...
- bzoj4665小w的喜糖 dp+容斥
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 120 Solved: 72[Submit][Status][Discuss] ...
- bzoj4665 小w的喜糖(dp+容斥)
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 222 Solved: 130[Submit][Status][Discuss ...
- BZOJ4665: 小w的喜糖 DP
对于这道题,首先每个人的位置并不影响结果 所以我们可以将相同颜色糖果的人放在一块处理 设 $f_{i,j}$ 表示处理到第 $i$ 种糖果至少有 $j$ 人的糖果和原先的类型相同 枚举当前种类中不满足 ...
- BZOJ4665 : 小w的喜糖
考虑枚举哪些人一定不合法,那么方案数可以通过简单的排列组合算出. 于是设$f[i][j]$表示前$i$种糖果,一共有$j$个人一定不合法的方案数,但是这样并不能保证其他人一定合法,所以需要进行容斥. ...
- 【BZOJ4665】小w的喜糖 容斥+组合数
[BZOJ4665]小w的喜糖 Description 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那 ...
- 小w的喜糖(candy)
小w的喜糖(candy) 题目描述 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那会有多少种方案使得每 ...
- 【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 94 Solved: 53 Description 废话不多说,反正小w要发喜 ...
- ●BZOJ 4665 小w的喜糖
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4665 题解: 容斥,dp令 v[i] 表示原来拥有i类糖果的人数. (一个套路,首先把每个糖 ...
- BZOJ 4665: 小w的喜糖
Sol DP+容斥. 这就是一个错排的扩展...可是想到容斥却仅限于种数的容斥,如果种数在一定范围内我就会做了QAQ. 但是容斥的是一定在原来位置的个数. 发现他与原来的位置无关,可以先把每个同种的糖 ...
随机推荐
- spring 使用异步任务
1.说明 在springboot 中使用 @Async 实现异步任务处理,下面介绍一下如何实现这个. 2.实现代码 2.1 增加@EnableAsync @EnableAsync public cla ...
- postgres 在centos 安装
执行如下命令安装POSTGRES sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86 ...
- zz 失血模型与充血模型等
失血模型与充血模型 | 三秋 (贫血模型)优点是系统的层次结构清楚,各层之间单向依赖,Client->(BusinessFacade)->BusinessLogic->Data Ac ...
- 【深度剖析】自主可控的全国产方案,基于龙芯LS2K1000LA-i!
龙芯LS2K1000LA-i产品简介 LS2K1000LA-i是龙芯双核LoongArch LA264自主架构处理器.创龙科技基于LS2K1000LA-i设计的工业核心板(SOM-TL2K1000)板 ...
- Linux 管理面板云帮手、APPNODE与宝塔哪个好
阿里云服务器推荐购买99元 由于用作服务器的 Linux 主机通常都没有图形化界面,与日常使用的 Windows .MAC有着很大的差别,一些必备组件的安装或更新就很费时间,后期维护也费神.服务器管理 ...
- Qt编写安防视频监控系统31-onvif设备搜索
一.前言 做视频监控系统,绕不过onvif这玩意,这玩意主要就是为了统一一个大概的标准,能够对各个厂家的监控设备进行常用的一些操作,比如搜索.获取信息.云台控制.事件订阅.抓拍图片等,如果没有这个规范 ...
- Intellij IDEA开发环境中Springboot项目无Run ****main()的菜单
问题描述: Intellij IDEA开发环境中Springboot项目无Run ****main()的菜单. 解决办法有以下几种: 方法1:Idea无右键run选项, 无法通过main方法启动sp ...
- OpenMMLab AI实战营 第五课笔记
OpenMMLab AI实战营 第五课笔记 目录 OpenMMLab AI实战营 第五课笔记 在气球数据集上训练检测模型 进入 mmdetection 主目录 下载并观察气球数据集 下载训练好的mas ...
- manim边做边学--动画组合
动画组合类的作用是将多个动画组合起来,以实现更复杂的动画效果. Manim中有4个用于动画组合的类: AnimationGroup:将多个动画组合在一起同时播放,能一次性呈现多个对象的不同变化 Lag ...
- ofd轻阅读超大文件优化方案
本人使用Typescript开发了一款ofd 阅读器,参见文章<ofd轻阅读>.web端实现阅读功能有两种方案: ofd转svg:使用h5 canvas. 两种方案各有优劣,本人采用了ca ...