CF248E Piglet's Birthday
题面
题意翻译
给定$n$个货架,初始时每个上面有$a[i]$个蜜罐。
有$q$次操作,每次操作形如$u,v,k$,表示从货架$u$上任意选择$k$个蜜罐试吃(吃过的也还能吃),吃完后把这$k$个蜜罐放到$v$货架上去。
每次操作完之后回答所有蜜罐都被试吃过的货架数量的期望
题解
直接引用$\text{yyb}$的
发现没被吃过的数量对于每个货架而言都是单调不增的。
所以考虑没有被吃过的数量,设$f[i][j]$表示第$i$个货架有$j$个蜜罐没有被试吃的概率。
转移的话枚举当前试吃了几个没被吃过的蜜罐用组合数转移即可。
代码
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<algorithm>
#define RG register
#define file(x) freopen(#x".in", "r", stdin);freopen(#x".out", "w", stdout);
#define clear(x, y) memset(x, y, sizeof(x))
inline int read()
{
int data = 0, w = 1; char ch = getchar();
while(ch != '-' && (!isdigit(ch))) ch = getchar();
if(ch == '-') w = -1, ch = getchar();
while(isdigit(ch)) data = data * 10 + (ch ^ 48), ch = getchar();
return data * w;
}
const int maxn(100010);
double f[maxn][110], ans;
int n, q, a[maxn], b[maxn], ln[maxn];
inline double C(int n, int m)
{
if(n < m) return 0; double ans = 1;
for(RG int i = 1; i <= m; i++) ans *= 1. * (n - i + 1) / i;
return ans;
}
int main()
{
n = read();
for(RG int i = 1; i <= n; i++) a[i] = b[i] = read();
for(RG int i = 1; i <= n; i++) f[i][a[i]] = 1;
for(RG int i = 1; i <= n; i++) ans += f[i][0];
q = read();
for(RG int i = 1; i <= q; i++)
{
int x = read(), y = read(), K = read(); ans -= f[x][0];
for(RG int j = 0; j <= a[x]; j++)
{
double F = 0, c = C(b[x], K);
for(RG int k = 0; k <= K; ++k)
F += f[x][j + k] * C(j + k, k) * C(b[x] - j - k, K - k) / c;
f[x][j] = F;
}
b[x] -= K, b[y] += K, ans += f[x][0];
printf("%.10lf\n", ans);
}
return 0;
}
CF248E Piglet's Birthday的更多相关文章
- CF248E Piglet's Birthday(概率dp)
题面 luogu CodeForces 题解 \(orz\) yyb 转移蜜罐其实是吓唬人的...... 转移的蜜罐都是尝试过的,所有只关心当前架子上的蜜罐数 设\(f[i][j]\)表示第i个货架有 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
- 【CF248E】Piglet's Birthday(动态规划)
[CF248E]Piglet's Birthday(动态规划) 题面 洛谷 CodeForces 翻译: 给定\(n\)个货架,初始时每个上面有\(a[i]\)个蜜罐. 有\(q\)次操作,每次操作形 ...
- 湖南大学ACM程序设计新生杯大赛(同步赛)J - Piglet treasure hunt Series 2
题目描述 Once there was a pig, which was very fond of treasure hunting. One day, when it woke up, it fou ...
- 湖南大学ACM程序设计新生杯大赛(同步赛)I - Piglet treasure hunt Series 1
题目描述 Once there was a pig, which was very fond of treasure hunting. The treasure hunt is risky, and ...
- 简单粗暴,详细得不要不要的 JavaWeb快速入门实例(1)
额,有些标题党的嫌疑,小细节不用在意哈... 前端时间我在写一个系列,是关于JavaWeb的一个入门级项目实战,我的初衷就是打算写给初学者的,希望能对他们有所帮助. 这段时间博主也接触了一些事情,感觉 ...
- perl 语法速查
同时学perl.python和shell脚本会很容易将它们的语法搞混,本文主要是一个个人的总结,方便要用时的查询. perl基本语法.安装.帮助文档 文件头格式: #!/usr/bin/perl us ...
- Perl 语法 - 基础
perl语言的核心是正则表达式,在文本处理上非常有优势,与python类似,但语法不同,perl的语法很灵活,用多了才会觉得好用. 常用知识点总结: perl语法类似于C语言(perl源于Unix), ...
随机推荐
- C# 队列(Queue) 和堆栈(Stack)
队列 (Queue) ...
- Asp.net MVC + Signalr 实现多人聊天室
Asp.net SignalR 简介: 首先简单介绍一下Signalr ,我也是刚接触,觉得挺好玩的,然后写了一个多人聊天室. Asp.net SignalR 是为Asp.net 开发人员提供的一个库 ...
- 如何快速的给你的项目添加icon图标
如何快速的给你的项目添加icon图标 下载软件 如何制作图片 将制作的图标拖到项目当中 设置启动页 注意: 如果手动添加了启动页的话,记得将Launch Screen中的东西清除掉
- Linux下安装Tomcat7
一.Tomcat7软件包下载 Tomcat下载地址http://tomcat.apache.org/download-70.cgi 下载完成后, 将软件包apache-tomcat-7.0.82.ta ...
- Linux 系统的主机别名文件
修改主机名文件 # 方式一: 临时生效 hostname 主机名 hostname omc 临时生效 # 方式二: 编辑配置文件[永久生效] vim /etc/sysconfig/network [更 ...
- MATLAB 正则表达式(一)(转)
http://blog.sina.com.cn/s/blog_53f29119010009uf.html 正则表达式这个词上大学的时候就听同寝室的一个家伙常念叨——那家伙当然很厉害啦,现在已经发洋财去 ...
- [转]JMX的Hello World
这篇写的很详尽了: http://www.blogjava.net/hengheng123456789/articles/65690.html
- PHP字符串——简单应用
错误的学习编码语言观点:语言语法不用记,多练习就可以了. 应该是死记住,然后加强练习以免忘记.以及在练习中加强理解.试着想“为什么是这样的语法习惯”.PHP提供了8种数据类型.4种是标量型(单值) ...
- 第三周:Excel分析
Excel常用于敏捷,快速,需要短时间相应的场景下是非常便捷的数据处理工具. 相对于语言类例如python和R等则用于常规的,规律的场景中应用,便于形成日常规则统计分析. 对于学习的路径:Excel函 ...
- openstack排除查找错误的两种方法
1.openstack日志一般放在什么什么位置?2.如何调试openstack命令执行过程? 我们会经常错误,但是我们碰到错误该怎么做,该如何找到原因.对于openstack有两种办法:在上一篇文章h ...