vjudge

题意

\(m\)面骰子,求

1.连续出现\(n\)个相同的停止;

2.连续出现\(n\)个不同的停止

的期望投骰子次数。

\(n,m ≤ 10^6\)

sol

首先考虑一个转移式子吧。

设\(f_i,g_i\)分别表示已经连续出现了\(i\)个相同/不同时的期望步数:

\[f_i=\frac 1mf_{i+1}+\frac{m-1}mf_1+1
\]

(只有\(\frac 1m\)的概率继续投出对应的颜色,否则就前功尽弃,从\(1\)重新开始)

\[g_i=\frac{m-i}{m}g_{i+1}+\frac 1m\sum_{x=1}^{i}g_x+1
\]

(如果投出了与之前相同的颜色,每种颜色各有\(\frac 1m\)的概率出现,所以各有\(\frac 1m\)的概率退回到\(1..i\)的状态)

边界状态\(f_n=g_n=0\),我们的目标是求\(f_0,g_0\)。

考虑怎么解上面那个东西吧,这里我们用一种很经典的方法——错位相减

先做\(f_i\)吧。

把\(f_{i+1}\)对应的式子写出来:

\[f_{i+1}=\frac 1mf_{i+2}+\frac{m-1}mf_1+1
\]

两式相减:

\[f_i-f_{i+1}=\frac 1m(f_{i+1}-f_{i+2})
\]

因为有一个很显然的条件式:\(f_0-f_1=1\)

所以就可以直接推得:

\(f_1-f_2=m,f_2-f_3=m^2......f_{n-1}-f_n=m^{n-1}\)

那么\(f_0=\sum_{i=0}^{n-1}m^i=\frac{1-m^n}{1-m}\)

然后是\(g_i\)。

同样把\(g_{i+1}\)对应的式子写出来:

\[g_{i+1}=\frac{m-i-1}{m}g_{i+2}+\frac 1m\sum_{x=1}^{i+1}g_x+1
\]

同样两式相减:

\[g_i-g_{i+1}=\frac{m-i}mg_{i+1}-\frac{m-i-1}mg_{i+2}-\frac 1mg_{i+1}\\=\frac{m-i-1}m(g_{i+1}-g_{i+2})
\]

同样还是根据\(g_0-g_1=1\)的性质可知:

\(g_1-g_2=\frac m{m-1},g_2-g_3=\frac{m^2}{(m-1)(m-2)}......\)

线性递推即可。

时间复杂度\(O(Tn)\)

code

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
int T;
while (scanf("%d",&T)!=EOF)
while (T--)
{
int ty,m,n;scanf("%d%d%d",&ty,&m,&n);
if (!ty)
printf("%.10lf\n",(pow(m,n)-1)/(m-1));
else
{
double ans=0,last=1;
for (int i=1;i<=n;++i)
ans+=last,last*=1.0*m/(m-i);
printf("%.10lf\n",ans);
}
}
return 0;
}

[HDU4652]Dice的更多相关文章

  1. [笔记] 期望概率DP

    线性高斯消元 模型概述 转移不是 DAG 的期望 DP. 成环的转移有特殊性质,如:只总父亲/根/儿子转移,只从左右转移-- 处理方式 以只从父亲和儿子转移的期望 DP 为例: \[f(x)=p\cd ...

  2. 【HDU4652】Dice(数学期望,动态规划)

    [HDU4652]Dice(数学期望,动态规划) 题面 Vjudge 有一个\(m\)面骰子 询问,连续出现\(n\)个相同的时候停止的期望 连续出现\(n\)个不同的时候停止的期望 题解 考虑两种分 ...

  3. HDU4652:Dice

    题面 传送门 题意 \(m\)面的骰子 求连续出现\(n\)个相同面的期望次数 或者 求连续出现\(n\)个不同面的期望次数 Sol 设\(f[i]\)表示已经出现了\(i\)~\(n\)这些面相同的 ...

  4. HDOJ 4652 Dice

      期望DP +数学推导 Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  5. 三种renderman规范引擎的dice对比

    次表面做的有些烦躁,既然如此,索性先记一下前一阵比较的PIXIE.3delight.prman的dice方式. 研究过reyes的人都知道dice,简而言之,就是为了生成高质量高精度的图片(电影CG) ...

  6. LightOJ 1248 Dice (III) 概率

    Description Given a dice with n sides, you have to find the expected number of times you have to thr ...

  7. hdu 4586 Play the Dice 概率推导题

    A - Play the DiceTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...

  8. 概率 Gym 100502D Dice Game

    题目传送门 /* 题意:两个人各掷两个骰子,给出每个骰子的最小值和最大值,其余值连续分布 问两人投掷,胜利的概率谁大 数据小,用4个for 把所有的可能性都枚举一遍,统计每一次是谁胜利 还有更简单的做 ...

  9. HDU 5955 Guessing the Dice Roll

    HDU 5955 Guessing the Dice Roll 2016 ACM/ICPC 亚洲区沈阳站 题意 有\(N\le 10\)个人,每个猜一个长度为\(L \le 10\)的由\(1-6\) ...

随机推荐

  1. 使用Socket通信实现FTP客户端程序

    FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...

  2. 【python】-- socketserver

    socketserver SocketServer服务端内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求.即:每个客户端请求连接到服务器时,Socket服务端 ...

  3. 【WEB】高并发Web服务的演变-节约系统内存和CPU

    目前主流浏览器通常可以存在2-6个并发. 连接和请求,占据了服务器的大量CPU和内存等资源.在资源数目超过100+的网站页面中,使用更多的下载连接,非常有必要. 缓解“高并发”的压力的手段. 一. W ...

  4. MyBatis:学习笔记(4)——动态SQL

    MyBatis:学习笔记(4)——动态SQL 如果使用JDBC或者其他框架,很多时候需要你根据需求手动拼装SQL语句,这是一件非常麻烦的事情.MyBatis提供了对SQL语句动态的组装能力,而且他只有 ...

  5. Java基础教程:反射基础

    Java基础教程:反射基础 引入反射 反射是什么 能够动态分析类能力的程序称为反射. 反射是一种很强大且复杂的机制. Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时 ...

  6. Ionic常见问题

    1.sh: 1: glxinfo: not found sudo apt-get update && sudo apt-get install mesa-utils 2.ionic s ...

  7. Hadoop2.x + eclipse 插件配置

    http://blog.csdn.net/u012874209/article/details/52105304 搭建集群那些就不用说了,主要有几个关键的地方需要注意(自己的Hadoop版本是2.5. ...

  8. Java多线程系列 面试题

    1. https://blog.csdn.net/jjj19891128/article/details/24393661  多线程经典面试题 2. https://blog.csdn.net/ll6 ...

  9. STL 之map解决 Message Flood(原字典树问题)

                                                                                      Message Flood Time ...

  10. Spring Cloud之Zuul负载均衡

    Zuul网关默认是实现负载均衡的,不需要任何配置.默认开启ribbon效果的 可以启启动两个服务端口,访问下.