※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 1344번 문제인 축구이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/1344
1344번: 축구
홍준이는 축구 경기를 보고 있다. 그러다가 홍준이는 역시 두 팀 중 적어도 한 팀이 골을 소수로 득점할 확률이 궁금해 졌다. 축구 경기는 90분동안 이루어지고, 분석을 쉽게하기 위해서 경기를 5
www.acmicpc.net
어떤 한 팀이 5분에 골을 넣을 확률을
위의 점화식을 이용해 각 팀의 점수가 소수일 확률을 구하고, 이를 이용해 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
typedef long double ld;
ld dp1[19][19];
ld dp2[19][19];
ld p1, p2;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
dp1[0][0] = 1;
cin >> p1; p1 /= 100;
p2 = 1 - p1;
for (int t = 1; t < 19; t++) {
dp1[t][0] = dp1[t - 1][0] * p2;
for (int n = 1; n <= t; n++) {
dp1[t][n] = dp1[t - 1][n - 1] * p1 + dp1[t - 1][n] * p2;
}
}
dp2[0][0] = 1;
cin >> p1; p1 /= 100;
p2 = 1 - p1;
for (int t = 1; t < 19; t++) {
dp2[t][0] = dp2[t - 1][0] * p2;
for (int n = 1; n <= t; n++) {
dp2[t][n] = dp2[t - 1][n - 1] * p1 + dp2[t - 1][n] * p2;
}
}
p1 = dp1[18][2] + dp1[18][3] + dp1[18][5] + dp1[18][7] + dp1[18][11] + dp1[18][13] + dp1[18][17];
p2 = dp2[18][2] + dp2[18][3] + dp2[18][5] + dp2[18][7] + dp2[18][11] + dp2[18][13] + dp2[18][17];
cout << fixed;
cout.precision(10);
cout << 1 - (1 - p1) * (1 - p2);
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 2275 // C++] 트리의 높이 줄이기 (0) | 2023.07.19 |
---|---|
[BOJ 2379 // C++] 트리 탐색하기 (0) | 2023.07.18 |
[BOJ 15707 // C++] exceed or not (1) | 2023.07.16 |
[BOJ 2705 // C++] 팰린드롬 파티션 (0) | 2023.07.15 |
[BOJ 2759 // C++] 팬케이크 뒤집기 (0) | 2023.07.14 |