本文将同步发布于:

题目

题目链接:HDU-4015 Mario and MushroomsVjudge HDU-4015

题意简述

马里奥初始只有 \(1\) 点血。

有两种蘑菇,一种是好蘑菇,一种是坏蘑菇;好的吃了会增加 \(1\) 点血,坏蘑菇吃了会减少 \(m\) 点血;

共有 \(mk+1\) 个好蘑菇和 \(k\) 个坏蘑菇,请问有多少种蘑菇的排列方式使得马里奥在按顺序吃下蘑菇后的任意时刻血量均 \(\geq 1\)。

求答案与总的排列个数的比值,即马里奥的存活概率。

两个排列不同,当且仅当存在至少一个位置蘑菇的种类不同。

题解

Raney 引理

不难发现,如果马里奥可以存活,那么最后吃完所有蘑菇,一定只剩下 \(1\) 点血。

不难考虑到 Raney 引理,即对于一个总和为 \(1\) 的整数序列,它的循环同构序列中有且仅有一个满足前缀和数组均大于 \(0\)。

证明:

具体地,我们考虑在平面直角坐标系 \(xOy\) 中绘制前缀和数列图像(以 \(a=[1,3,-4,1]\) 为例)。

作一条斜率为 \(\frac{1}{a+b}\) 的直线,将其平移到与图像下相切。

  • 充分性:不难发现,如果我们以切点为循环位移的终点(它后一个点为数列的第一项),构造出来的数列一定符合条件;
  • 必要性:如果不相切,必定存在交点,考虑到数列中都是整数,交点一定满足纵坐标小于等于切点,前缀和小于等于零,不可能。

Raney 引理得证。

圆排列与计数

由 Raney 得知,所有蘑菇的一个圆排列一定对应恰好一个合法的排列,因此我们要求解的实际上就是圆排列个数与总排列个数的比值。

根据重复元素排列公式:

总的排列个数 \(p\) 满足

\[p=\frac{(k+mk+1)!}{k!(mk+1)!}
\]

根据圆排列公式:

圆排列个数 \(q\) 满足

\[q=\frac{p}{k+mk+1}
\]

因此,答案 \(\texttt{ans}\) 满足

\[\texttt{ans}=\frac{q}{p}=\frac{1}{k+mk+1}
\]

参考代码

#include<cstdio>
using namespace std;
#define reg register
typedef long long ll; int main(void){
int t;
scanf("%d",&t);
reg int Case=0;
while(t--){
static int m,k;
scanf("%d%d",&m,&k);
printf("Case #%d: %.8lf\n",++Case,1.0/(k+m*k+1));
}
return 0;
}

「题解」HDU-4015 Mario and Mushrooms的更多相关文章

  1. 「题解」「美团 CodeM 资格赛」跳格子

    目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...

  2. 「题解」「HNOI2013」切糕

    文章目录 「题解」「HNOI2013」切糕 题目描述 思路分析及代码 题目分析 题解及代码 「题解」「HNOI2013」切糕 题目描述 点这里 思路分析及代码 题目分析 这道题的题目可以说得上是史上最 ...

  3. 「题解」JOIOI 王国

    「题解」JOIOI 王国 题目描述 考场思考 正解 题目描述 点这里 考场思考 因为时间不太够了,直接一上来就着手暴力.但是本人太菜,居然暴力爆 000 ,然后当场自闭- 一气之下,发现对 60pts ...

  4. 「题解」:[loj2763][JOI2013]现代豪宅

    问题 A: 现代豪宅 时间限制: 1 Sec  内存限制: 256 MB 题面 题目描述 (题目译自 $JOI 2013 Final T3$「現代的な屋敷」) 你在某个很大的豪宅里迷路了.这个豪宅由东 ...

  5. 「题解」:$Six$

    问题 A: Six 时间限制: 1 Sec  内存限制: 512 MB 题面 题面谢绝公开. 题解 来写一篇正经的题解. 每一个数对于答案的贡献与数本身无关,只与它包含了哪几个质因数有关. 所以考虑二 ...

  6. 「题解」:$Smooth$

    问题 A: Smooth 时间限制: 1 Sec  内存限制: 512 MB 题面 题面谢绝公开. 题解 维护一个队列,开15个指针,对应前15个素数. 对于每一次添加数字,暴扫15个指针,将指针对应 ...

  7. 「题解」:Kill

    问题 A: Kill 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 80%算法 赛时并没有想到正解,而是选择了另一种正确性较对的贪心验证. 对于每一个怪,我们定义它的 ...

  8. 「题解」:y

    问题 B: y 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 考虑双向搜索. 定义$cal_{i,j,k}$表示当前已经搜索状态中是否存在长度为i,终点为j,搜索过边 ...

  9. 「题解」:x

    问题 A: x 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 赛时想到了正解并且对拍了很久.对拍没挂,但是评测姬表示我w0了……一脸懵逼. 不难证明,如果对于两个数字 ...

随机推荐

  1. C#-窗体移动

    #region 窗体移动API [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [Dll ...

  2. C++ 三消游戏基本实现

    最近在研究三消算法,我想试试在完全不借助网络资源的情况下搞定这个东西,所以有些地方可能不是最优的. 代码留此备忘. 1. 3x_desk_event.h 1 #pragma once 2 3 #ifn ...

  3. keep-alive与生命周期函数

    理解keep-alive keep-alive是Vue内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染 router-view也是一个组件,如果直接被keep-alive包在里面,所有路径匹 ...

  4. 云空调来自 GitHub 的冷气——GitHub 热点速览 v.21.20

    作者:HelloGitHub-小鱼干 万物皆可上云,air-conditioner 是上周火爆小鱼干朋友圈和公众号信息流的云空调项目.第一眼的时候,你会觉得和这个云空调还挺别致的,第二眼,si~~感到 ...

  5. 计算机网络参考模型,IP地址及MAC地址查看方法,数据包封装过程

    分层思想 首先,计算机网络参考模型,是基于分层思想而出现的.分层思想,就是将复杂流程分解为几个功能单一的子过程. 优点: 可以让整个流程更加清晰, 让复杂问题简单化, 更容易发现问题,并真对性的解决问 ...

  6. C++基础——文件逐行读取与字符匹配

    技术背景 用惯了python,对其他语言就比较的生疏.但是python很多时候在性能上比较受局限,这里尝试通过C++来实现一个文件IO的功能,看看是否能够比python的表现更好一些.关于python ...

  7. Packing data with Python

    Defining how a sequence of bytes sits in a memory buffer or on disk can be challenging from time to ...

  8. X264码率控制总结1——ABR,CQP,CRF

    1.  X264显式支持的一趟码率控制方法有:ABR, CQP, CRF. 缺省方法是CRF.这三种方式的优先级是ABR > CQP > CRF. if ( bitrate ) rc_me ...

  9. Taro使用多线程Worker相关问题解决

    JavaScript 语言采用的是单线程模型,HTML5标准中的Web Worker ,为 JavaScript 创造多线程环境.微信小程序也有相应的Worker,同样具备多线程运行的能力 主页面中创 ...

  10. [源码分析] 定时任务调度框架 Quartz 之 故障切换

    [源码分析] 定时任务调度框架 Quartz 之 故障切换 目录 [源码分析] 定时任务调度框架 Quartz 之 故障切换 0x00 摘要 0x01 基础概念 1.1 分布式 1.1.1 功能方面 ...