백준 22984번: 반짝반짝 2 [C++]

골드 V 골드 V

문제

반짝반짝 2
확률, 기댓값에 대한 개념을 이용해 불이 들어오는 전구 개수의 기댓값을 구하는 문제입니다.

풀이

원래 스트립에 있던 전구$i$의 불이 켜질 확률은 $p_i$입니다.
그리고 전구 $i$와 전구$i+1$사이에 있는 전구가 켜질 확률은
$p_i \times (1-p_{i+1}) + (1-p_i) \times p_{i+1}$입니다.

코드

$i$번째 전구에서,

  1. $i$번째 전구가 켜질 확률
  2. $i-1$번째 전구와 $i$번째 전구 사이의 전구가 켜질 확률
  3. $i$번째 전구와 $i+1$번째 전구 사이의 전구가 켜질 확률

을 구해주면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <bits/stdc++.h>
using namespace std;


int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);


    int n;
    cin >> n;
    vector<double> p;
    p.reserve(n+2);
    double e = 0;
    p.push_back(0);
    for (int i = 1 ; i <= n ; i++) {
        double p_i;
        cin >> p_i;
        p.push_back(p_i);
    }
    p.push_back(0);

    for (int i = 1 ; i <= n ; i++) {
        e += p[i] + (1-p[i])*(p[i-1] + p[i+1]);
    }

    cout << fixed;
    cout.precision(8);
    cout << e;


    return 0;
}

백준 22984번: 반짝반짝 2 [C++]