けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 242 A - T-shirt (6Q, 灰色, 100 点)

確率を考えるための基礎となる問題!

問題概要

コンテストに 1000 人が参加した。

  • 上位  A 位は、確実に T シャツがもらえる
  • 上位  A+1 位から  B 位までは、その中からランダムに  C 人が選ばれて、T シャツがもらえる
  • それ以外は、T シャツをもらえない

いろはさんはこのコンテストの参加者で  X 位であった。いろはさんが T シャツをもらえる確率を求めよ。

制約

  •  1 \le A \lt B \le 1000
  •  1 \le C \le B - A
  •  1 \le X \le 1000

考えたこと

まず、 X \le A であれば、いろはさんは確実に T シャツがもらえるので、求める確率は 1.0 である。

次に、 X \gt B であれば、いろはさんは T シャツをもらえないので、求める確率は 0.0 である。

これらの間の  A \lt X \le B である場合を考える。この場合は、いろはさんを含めた  B - A 人からランダムに  C 人が選ばれる。よって、いろはさんが当選する確率は

 \displaystyle \frac{C}{B-A}

と求められる。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int A, B, C, X;
    cin >> A >> B >> C >> X;
    
    double res;
    if (X <= A) res = 1.0;
    else if (X > B) res = 0.0;
    else res = (double)(C) / (B - A);
    
    cout << fixed << setprecision(6) << res << endl;
}