OPPO · 概率论 · 算法编程题
OPPO 概率论 n ≤ 1e6 时限 1 秒 / 256 MB

题目描述

小欧拿了 n 个杯子排成了一排,其中有 k 个杯子装满了水,剩余的 n-k 个杯子为空的。小欧每回合的操作如下:
1. 随机选择一个杯子。
2. 杯子是空的。回合直接结束。
3. 杯子是满的。如果小欧上一回合喝过了水,则回合结束;否则将喝完这杯水,回合结束。
小欧想知道,她喝完所有水的回合数期望是多少?

输入输出

输入描述
两个正整数 n,k ,用空格隔开。
1≤ k ≤ n ≤ 10^6
输出描述
一个浮点数,代表期望的回合数。如果你的答案和正确答案的误差不超过 10^-6 ,则认为答案正确。

样例共 3 组

样例 1 · 只有一杯水,第一回合就可以喝完。
输入
1 1
输出
1.000000000
样例 2 · 有50%的概率1回合喝完,有25%的概率需要2回合 ,有12.5%的概率需要3回合…… 总期望为0.5*2+0.25*3+0.125*4+……=2
输入
2 1
输出
2.000000000
样例 3 · 第一回合有100%的概率喝一杯水。 第二回合无论是否选到有水的杯子都不会喝水。 0.5*3+0.25*4+0.125*5+...=4
输入
2 2
输出
4.000000000

算法解析依据一般

考点:概率论

数据规模 n ≤ 1e6 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:k ≤ 1e6,n ≤ 1e6
  • 复杂度门槛:只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:概率论

用期望的线性性质拆解问题,避免枚举全部状态。

思路框架(概率论 通法 · 非本题专属)

  1. 期望的线性性:E(X+Y) = E(X)+E(Y),即使变量不独立也成立。
  2. 把总期望拆成若干「指示变量」的期望之和,分别求每个事件发生的概率。
  3. 按定义算期望时,用 Σ(取值 × 概率)。
  4. 涉及无穷过程时,利用递推 / 马尔可夫性质列方程解。

实现要点:计数期望时,先算总方案数,再算目标方案数,比值即概率。

复杂度:时间 O(n) ~ O(n²) | 空间 O(1) ~ O(n)

该范式的通法易错点

  • 误以为期望线性性需要独立性。
  • 概率分母(总方案数)统计错。

对照本题

  • 数据规模 n ≤ 1e6,只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

样例 1:输入 1 1 → 输出 1.000000000

只有一杯水,第一回合就可以喝完。

样例 2:输入 2 1 → 输出 2.000000000

有50%的概率1回合喝完,有25%的概率需要2回合 ,有12.5%的概率需要3回合……

总期望为0.5*2+0.25*3+0.125*4+……=2

样例 3:输入 2 2 → 输出 4.000000000

第一回合有100%的概率喝一杯水。

第二回合无论是否选到有水的杯子都不会喝水。

0.5*3+0.25*4+0.125*5+...=4

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2024年秋招-OPPO-后端岗笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解