[集训队作业2018]喂鸽子
这种题的一个常用转化是,只考虑所有有效的操作(比如在这题中喂一个没饱的鸽子),假设还剩\(k\)个元素可以进行有效操作,那么进行下一次有效操作的期望次数是\(\frac{n}{k}\)。
考虑这题,我们把每一次喂到的没饱的鸽子写成一个序列,那么这个序列的长度是\(nk\)。我们先假设鸽子是按从\(1\)到\(n\)的顺序依次饱的,最后再进行一些操作计算答案。
设\(f_{i,j}\)表示考虑序列中前\(i\)个元素,\(1\)到\(j\)的鸽子饱了的概率,\(g_{i,j}\)表示考虑序列中前\(i\)个元素,\(1\)到\(j\)的鸽子饱了的概率×期望操作次数。我们考虑这样DP:当我们希望放入一个数\(x\)时,如果\(x\)没饱,那么我们先填个\(0\)上去,如果\(x\)饱了,那么我们就在前面的\(0\)中再取出\(k-1\)个全部改为\(x\)。转移时,枚举下一位填\(0\)还是填\(j+1\)。如果是填\(0\),那么\(f'=f\times\frac{1}{n-j}\)(因为我们假设我们强制了这一位填某个数\(x\),最终到底填什么由后面的组合数来决定),\(g'=(g+\frac{n}{n-j}\times f_{i,j})\times\frac{1}{n-j}\)。如果填\(j+1\),那么在上述转移的基础上乘一个组合数\(\binom{i-jk}{k-1}\)。
最后答案是\(g_{nk,n}\times n!\),乘\(n!\)是因为\(g\)表示的是概率×期望操作次数,我们强制了鸽子是按从\(1\)到\(n\)的顺序依次饱的,这个条件贡献了\(\frac{1}{n!}\)的概率。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int mod=998244353;int f[N][55],g[N][55],fac[N],inv[N],ifac[N],s,n,k;int C(int n,int m) {if(m<0||n<m) return 0;return 1ll*fac[n]*ifac[m]%mod*ifac[n-m]%mod;
}int add(int a,int b) { return a+b>=mod?a+b-mod:a+b; }
void inc(int &a,int b) { a=a+b>=mod?a+b-mod:a+b; }int main() {
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifcin>>n>>k,s=n*k;fac[0]=1;for(int i=1;i<=s;i++) fac[i]=1ll*fac[i-1]*i%mod;inv[1]=1;for(int i=2;i<=s;i++) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;ifac[0]=1;for(int i=1;i<=s;i++) ifac[i]=1ll*ifac[i-1]*inv[i]%mod;f[0][0]=1;for(int i=0,x,y;i<s;i++)for(int j=0;j<n;j++)if(f[i][j]||g[i][j]) {inc(f[i+1][j],x=1ll*f[i][j]*inv[n-j]%mod);inc(g[i+1][j],y=1ll*add(g[i][j],1ll*n*inv[n-j]%mod*f[i][j]%mod)*inv[n-j]%mod);inc(f[i+1][j+1],1ll*x*C(i-j*k,k-1)%mod);inc(g[i+1][j+1],1ll*y*C(i-j*k,k-1)%mod);}printf("%lld\n",1ll*g[s][n]*fac[n]%mod);return 0;
}
转载于:https://www.cnblogs.com/gczdajuruo/p/10777115.html
[集训队作业2018]喂鸽子相关推荐
- UOJ#449. 【集训队作业2018】喂鸽子
#449. [集训队作业2018]喂鸽子 DP好题 法一:min-max容斥 处理前m个,最快吃饱的鸽子期望的时间 根据期望的定义 考虑每个方案数的概率*期望次数 枚举前m个用了x个,概率都是(1/m ...
- uoj#422. 【集训队作业2018】小Z的礼物
uoj#422. [集训队作业2018]小Z的礼物 题目描述 Solution 所有礼物全部取到的方案数并不好求,因此我们考虑min−maxmin-maxmin−max容斥,转化为第一次取到集合中某一 ...
- 【UOJ#450】【集训队作业2018】复读机(生成函数,单位根反演)
[UOJ#450][集训队作业2018]复读机(生成函数,单位根反演) 题面 UOJ 题解 似乎是\(\mbox{Anson}\)爷的题. \(d=1\)的时候,随便怎么都行,答案就是\(k^n\). ...
- UOJ#418. 【集训队作业2018】三角形
#418. [集训队作业2018]三角形 和三角形没有关系 只要知道儿子放置的顺序,就可以直接模拟了 记录历史最大值 用一个pair(a,b):之后加上a个,期间最大值为增加b个 合并? A1+A2= ...
- 【集训队作业2018】喂鸽子
我的计数还是太差了-- 这道题现在知道三种做法. 1. 直接DP 首先显然需要min-max容斥(不知道请百度),不然很难算. 显然对于大小相同的集合答案一样,问题转化为求 \(f_c\) 即 \(c ...
- UOJ#449. 【集训队作业2018】喂鸽子 min-max容斥,FFT
原文链接www.cnblogs.com/zhouzhendong/p/UOJ449.html 题解 设 f(i) 表示给 i 只鸽子喂食使得至少一只鸽子被喂饱的期望次数,先 min-max容斥 一下. ...
- 【集训队作业2018】复读机
即使是一道菜题,也掩盖不了窝生成函数弱的事实. 窝看到题目只想到了DP,还是生成函数不够熟.然后直到神仙WWJ提醒我用生成函数-- 首先是排列,那就可以写成指数型生成函数的优美形式.直接表示成exp吧 ...
- 【集训队作业2018】围绕着我们的圆环
我貌似开始爆OJ了 主要是因为预处理的范围写小,以及第一次写带删除线性基,然后就调了好久/cy 如果把 \(A\) 看做一堆列向量,然后对于 \(C\) 的一个列向量 \(V\) ,以及对应列的 \( ...
- 【集训队作业2018】复读机【指数型生成函数】【单位根反演】【二项式定理】
传送门 单位根反演听着高级,其实没啥技术含量-- 本文是篇几乎没有证明的佛系讲解 单位根反演的式子长这样: 1n∑i=0n−1ωnik=[k∣n]\frac{1}{n}\sum_{i=0}^{n-1} ...
- [集训队作业2018] count(笛卡尔树,生成函数,卡特兰数)
传送门 什么情况下两序列同构 对于两序列A[1,n],B[1,n]A[1,n],B[1,n]A[1,n],B[1,n],设fA(1,n)=pa,fB(1,n)=pbf_A(1,n)=p_a,f_B(1 ...
最新文章
- Linux-profile、bashrc、bash_profile之间的区别和联系
- pc 页面在移动端怎么获取放大倍数、_百度移动搜索开放适配服务的3种方法
- 玩游戏也能学Python?!论Python的正确打开方式
- UCMap移动GIS 时空地图GIS
- php打印预览jquery,php 实现打印预览的功能
- AndroidStudio_安卓原生开发_自定义单选列表Spinner绑定自定义数据类型---Android原生开发工作笔记143
- python tkinter text改变文本字体颜色_Python3 tkinter基础 Button text,fg 按钮上显示的文字 文字的颜色...
- [数据仓库]我理解的数据中台
- BGP超级失误:Verizon 搞垮 Cloudflare 和 AWS 等巨头,导致“连锁灾难性故障”
- spss分析方法-判别分析
- uctools.php,Discuz曝出安全隐患 XSS脚本漏洞和uctools.php
- python下载豆丁文档_doc_downloader
- Epic Games Launcher 无效驱动器E
- VOC2007/2012数据集解析
- 阿里文学 php,唐家三少质问阿里文学:骂我可以忍为何辱我亡妻
- 10 大开源免费的项目管理软件推荐
- 组件封装 - 省市区联动组件
- slice与split的区别
- Java中的四种Reference
- iOS程序员如何成为编程高手,并以此创业
热门文章
- JS瀑布流插件 -- salvattore
- 电脑变wifi 用电脑建立无线网
- nexus+4+android+6,Android 4.1.1+Nexus S安装BT5
- 映像劫持 Image Hijack
- 适用于开发者的开源分布式即时通讯系统
- ESP32|基于ESP32制作的低成本、可拓展性高的NES游戏机(1)(开源ESP32 NES模拟器)-效果演示及介绍
- 内存颗粒位宽和容量_SDRAM内存模组的物理Bank与芯片位宽(高手进阶,终极内存技术指南——完整/进阶版)...
- stm32 系统进入stop模式_STM32开发笔记78: 2种STOP模式的唤醒方法
- 论证可行性有哪几个方面
- [Java web编程]第2章 HTML与css网页开发基础(动画)