문제 링크
끝말잇기를 몇 판 하려고 한다.
한 판 하는데 a분이 걸리고 이길 확률은 d%이다.
매 판 이길 확률은 전 판에 비해서 k% 만큼 증가한다고 할 때 끝말잇기를 하는데 걸리는 시간의 기댓값을 구하라
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int a, d, k;
double accumulateProbability;
double winRate;
double ans;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// init
cin >> a >> d >> k;
ans = 0;
winRate = d / 100.0;
accumulateProbability = 1.0;
for (int i = 1; ; ++i) {
if (winRate > 1.0) {
ans += accumulateProbability * i;
break;
}
ans += accumulateProbability * i * winRate;
accumulateProbability = (accumulateProbability * (1 - winRate));
winRate += winRate * (k / 100.0);
}
cout << fixed;
cout.precision(7);
cout << ans * a << '\n';
}
간단한 확률 문제인데 확률 계산에 자꾸 실수가 있었다...
자꾸 풀어야 익숙하게 빨리 풀 수 있을 듯..?